Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TTimer процедура обработки события таймера


Страницы:   1 2

ZV ©   (2010-09-09 17:01:00) 

Меня интересует такой вопрос - при входе в процедуру обработки события TTimer, таймер продолжает  работать или нет? Не получиться такого что процедура обработки события еще не закончена а у таймера происходит новое событие. Или если я не уверен что процедура успеет выполнится до следующего события таймера то таймер лучше на время выполнения процедуры отключить?


Palladin   (2010-09-09 17:46:00) [21]


>  try    ... // обработка  
> finally    Timer1.Enabled := True
>  end


категорисески не согласен...  ) а стоит ли продолжать если эксцепшн?


Сергей М.   (2010-09-09 17:41:00) [22]


> ведь так в очередь могут стать фиг его знает сколько событий


Ничего подобного.
При возникновении очер.события таймера ОС прежде всего проверяет, нет ли ужев очереди сообщений целевому потоку сообщения WM_TIMER.
Если нет, то ставит его в очередь, иначе "игнорирует" событие.


ZV   (2010-09-09 17:41:00) [23]

Все понял, спасибо.


Юрий Зотов   (2010-09-09 17:38:00) [24]


> Ega23 ©   (09.09.10 17:34) [5]

Олег! Я тобой горжусь!
:o)


Юрий Зотов   (2010-09-09 17:37:00) [25]

> ZV ©   (09.09.10 17:29) [4]

Или отключать:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Enabled := False;
 try
   ... // обработка
 finally
   Timer1.Enabled := True
 end
end;


Или вводить в форму приватное булевское поле FBusy:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if FBusy then
   Exit;  
 FBusy := True;
 try
   ... // обработка
 finally
   FBusy := False
 end
end;


Ega23   (2010-09-09 17:34:00) [26]


> Получается происходит буферизация событий, а мне так не
> надо, если не успел обработать новое событие то и хрен с
> ним главное старое закончить, ведь так в очередь могут стать
> фиг его знает сколько событий.


procedure TForm1.Timer1OnTimer(Sender: TObject);
begin
 Timer1.Enabled := False;
 try
   // Делаем что надо
 finally
   Timer1.Enabled := True;
 end;
end;


ZV   (2010-09-09 17:29:00) [27]

Получается происходит буферизация событий, а мне так не надо, если не успел обработать новое событие то и хрен с ним главное старое закончить, ведь так в очередь могут стать фиг его знает сколько событий.
Я так думаю  на время выполнения процедуры обработки события  таймер надо отключать?


Сергей М.   (2010-09-09 17:23:00) [28]


> Или происходит но обработчик не запустится пока не закончится
> обработка предыдущего события?


Именно так.


ZV   (2010-09-09 17:18:00) [29]

Получается какие то противоречия. Значит таймер продолжает работать а событие  не происходит ? Или происходит но обработчик не запустится пока не закончится обработка предыдущего события?


Сергей М.   (2010-09-09 17:12:00) [30]


> при входе в процедуру обработки события TTimer, таймер продолжает
>  работать или нет?


Продолжает.


> Не получиться такого что процедура обработки события еще
> не закончена а у таймера происходит новое событие


Не получится.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо