Помогите решить проблему: Пишу программу на VB 6.0. Будет висеть в памяти и через определенные интервалы будет выполнять некоторые действия. Для задания этих интервалов на форму повесил элемент "таймер". Но у него свойство "Interval" максимум 65.5 сек. А надо минут 10-15... Подскажите, как это реализовать.
|
Не знаю как на VB, но в теории попытайся вставить пустой цикл.
Типа банальный QBasic: for i=1 to 1000000 i=i+1 next i |
С пустым циклом может быть проблема, чуть-чуть измени производительность и интервал времени изменится, тем более, что второе число в цикле будет очень большим для 10-15 минут и погрешность может накапливаться.
Можно попробовать использовать счётчик и условие. Когда таймер срабатывает инкрементируй счётчик, а затем проверяй его. Как только он превысит требуемое количество (для 10 минут это 10 срабатываний по 60 сек. - расчёт несложный :)), обнуляй его и выполняй остальную часть процедуры. Только не забудь обнулить его перед первым использованием. И главное - переменная счётчик не должна терять значение (это относится к времени жизни переменной). (Выходит, что и алкоголь иллюзия ? :)) |
Дополню gonsales
Можно в цикле 10 раз запустить таймер. Хотя решение достаточно корявое. Можно попробовать создать потомка TTimer у которого не будет такого ограничения (я думаю это связано с типом данных свойства "Interval") |
Ну блин, вы все даете со своими циклами - они же конкретно грузят ЦПУ и как было подмечено полностю зависят от приоритета посталеной задчи - пойди угадай где 10 мин а где 20.
Более изящное и правильное решение - это использовать API функцию Windows - GetTickCount (Private Declare Function GetTickCount Lib "kernel32" () As Long). Она возвращает количество милисекунд (1/1000 секунды), прошедших с момента запуска Windows. Разность показаний до выполнения некоторого кода (проверка нужного условия таймером) и после и будет являться временем, которое ушло на выполнение этого кода. А вот проверять эту расность может таймер через 60 с. - это уже нормально и если условие выполнено (разность>10 мин) то выполняем действия. Удачи всем. |
Ещё решение: заводится целая переменная ПЕР, куда накапливаются события таймера; таймер ставится, скажем, на 1 сек: если ПЕР>600 (=10 мин), то {<ДЕЙСТВИЕ>; ПЕР=0}, иначе ПЕР=ПЕР+1;
|
Время: 12:50. |
Время: 12:50.
© OSzone.net 2001-