VB 6.0
|
Новый участник Сообщения: 48 |
Профиль | Отправить PM | Цитировать Помогите решить проблему: Пишу программу на VB 6.0. Будет висеть в памяти и через определенные интервалы будет выполнять некоторые действия. Для задания этих интервалов на форму повесил элемент "таймер". Но у него свойство "Interval" максимум 65.5 сек. А надо минут 10-15... Подскажите, как это реализовать.
|
|
------- Отправлено: 11:14, 06-05-2003 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Не знаю как на VB, но в теории попытайся вставить пустой цикл.
Типа банальный QBasic: for i=1 to 1000000 i=i+1 next i |
------- Отправлено: 01:44, 07-05-2003 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
gonsales
Сообщения: n/a |
С пустым циклом может быть проблема, чуть-чуть измени производительность и интервал времени изменится, тем более, что второе число в цикле будет очень большим для 10-15 минут и погрешность может накапливаться.
Можно попробовать использовать счётчик и условие. Когда таймер срабатывает инкрементируй счётчик, а затем проверяй его. Как только он превысит требуемое количество (для 10 минут это 10 срабатываний по 60 сек. - расчёт несложный ), обнуляй его и выполняй остальную часть процедуры. Только не забудь обнулить его перед первым использованием. И главное - переменная счётчик не должна терять значение (это относится к времени жизни переменной). (Выходит, что и алкоголь иллюзия ? ) |
Отправлено: 10:30, 07-05-2003 | #3 |
Старожил Сообщения: 238
|
Профиль | Отправить PM | Цитировать Дополню gonsales
Можно в цикле 10 раз запустить таймер. Хотя решение достаточно корявое. Можно попробовать создать потомка TTimer у которого не будет такого ограничения (я думаю это связано с типом данных свойства "Interval" |
Отправлено: 06:59, 08-05-2003 | #4 |
obozrevatel
Сообщения: n/a |
Ну блин, вы все даете со своими циклами - они же конкретно грузят ЦПУ и как было подмечено полностю зависят от приоритета посталеной задчи - пойди угадай где 10 мин а где 20.
Более изящное и правильное решение - это использовать API функцию Windows - GetTickCount (Private Declare Function GetTickCount Lib "kernel32" () As Long). Она возвращает количество милисекунд (1/1000 секунды), прошедших с момента запуска Windows. Разность показаний до выполнения некоторого кода (проверка нужного условия таймером) и после и будет являться временем, которое ушло на выполнение этого кода. А вот проверять эту расность может таймер через 60 с. - это уже нормально и если условие выполнено (разность>10 мин) то выполняем действия. Удачи всем. |
|
Отправлено: 09:21, 14-05-2003 | #5 |
Пользователь Сообщения: 85
|
Профиль | Отправить PM | Цитировать Ещё решение: заводится целая переменная ПЕР, куда накапливаются события таймера; таймер ставится, скажем, на 1 сек: если ПЕР>600 (=10 мин), то {<ДЕЙСТВИЕ>; ПЕР=0}, иначе ПЕР=ПЕР+1;
|
Отправлено: 21:42, 03-09-2003 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
|