Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   VB 6.0 (http://forum.oszone.net/showthread.php?t=30321)

Shaytan 06-05-2003 11:14 208215

Помогите решить проблему: Пишу программу на VB 6.0. Будет висеть в памяти и через определенные интервалы будет выполнять некоторые действия. Для задания этих интервалов на форму повесил элемент "таймер". Но у него свойство "Interval" максимум 65.5 сек. А надо минут 10-15... Подскажите, как это реализовать.

Electras 07-05-2003 01:44 208216

Не знаю как на VB, но в теории попытайся вставить пустой цикл.
Типа банальный QBasic:

for i=1 to 1000000
i=i+1
next i

gonsales 07-05-2003 10:30 208217

С пустым циклом может быть проблема, чуть-чуть измени производительность и интервал времени изменится, тем более, что второе число в цикле будет очень большим для 10-15 минут и погрешность может накапливаться.

Можно попробовать использовать счётчик и условие.

Когда таймер срабатывает инкрементируй счётчик, а затем проверяй его. Как только он превысит требуемое количество (для 10 минут это 10 срабатываний по 60 сек. - расчёт несложный :)), обнуляй его и выполняй остальную часть процедуры.

Только не забудь обнулить его перед первым использованием. И главное - переменная счётчик не должна терять значение (это относится к времени жизни переменной).

(Выходит, что и алкоголь иллюзия ? :))

DimSher 08-05-2003 06:59 208218

Дополню gonsales
Можно в цикле 10 раз запустить таймер.
Хотя решение достаточно корявое.
Можно попробовать создать потомка TTimer у которого не будет такого ограничения (я думаю это связано с типом данных свойства "Interval")

obozrevatel 14-05-2003 09:21 208219

Ну блин, вы все даете со своими циклами - они же конкретно грузят ЦПУ и как было подмечено полностю зависят от приоритета посталеной задчи - пойди угадай где 10 мин а где 20.
Более изящное и правильное решение - это использовать API функцию Windows - GetTickCount (Private Declare Function GetTickCount Lib "kernel32" () As Long). Она возвращает количество милисекунд (1/1000 секунды), прошедших с момента запуска Windows. Разность показаний до выполнения некоторого кода (проверка нужного условия таймером) и после и будет являться временем, которое ушло на выполнение этого кода. А вот проверять эту расность может таймер через 60 с. - это уже нормально и если условие выполнено (разность>10 мин) то выполняем действия.

Удачи всем.

IZOprogman 03-09-2003 21:42 208220

Ещё решение: заводится целая переменная ПЕР, куда накапливаются события таймера; таймер ставится, скажем, на 1 сек: если ПЕР>600 (=10 мин), то {<ДЕЙСТВИЕ>; ПЕР=0}, иначе ПЕР=ПЕР+1;


Время: 12:50.

Время: 12:50.
© OSzone.net 2001-