Реальный интервал вызова таймера

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Реальный интервал вызова таймера

Сообщение Source » 25.10.2007 (Чт) 9:38

Заметил одну вещь - если поставить Timer1.Interval = 0 в процедуре таймера Timer1_Timer, таймер остановится, если поставить Timer1.Interval = 0 где-нить в другом месте программы, Timer1_Timer сработает ещё раз. Что же получается, следующий интервал таймера берётся по окончании работы процедуры Timer1_Timer, т.е. фактически таймер срабатывает с интервалом Timer1.Interval + время на выполнение кода в Timer1_Timer?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 25.10.2007 (Чт) 9:55

Либо я тебя неправильно понял, либо у меня все работает как положено. Код в студию. Проверял на приложенной форме
Вложения
Form1.rar
Проверял вот на этом
(544 байт) Скачиваний: 37
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 25.10.2007 (Чт) 11:34

Денис, что ты не понял? У тебя
Код: Выделить всё
Timer2.Interval = 100
i2 = i2 + 1
Timer2.Interval = 0

казалось бы таймер не должен срабатывать, а срабатывает.
Вот твой код немного изменённый. Также там код для теста интервала, через пару минут время в заголовке формы начинает сильно отставать от правильного времени.
Вложения
Form1.rar
(1.99 Кб) Скачиваний: 35

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.10.2007 (Чт) 12:11

Source
Дело в том что таймер лочится меж вызовами обработчика события.

Поэтому, если его вырубить из обработчика, он вырубится сразу, а если из-вне, то возможно, сработает ещё раз.
Последний раз редактировалось Хакер 25.10.2007 (Чт) 16:43, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 25.10.2007 (Чт) 16:35

что значит "лочится меж"?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 25.10.2007 (Чт) 16:42

"меж" значить "между". Предлог такой.

лочится (от англ. lock ) - значит блокируется. Значит, пока непроизойдёт возврата из одного обработчика события, другое не произойдёт. По этой причине, если в обработчик таймера вставить бесконечный цикл с DoEvents, косвенной рекурсии не будет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList  
cron