![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TTimer процедура обработки события таймера
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, таймер продолжает
> работать или нет?
Продолжает.
> Не получиться такого что процедура обработки события еще
> не закончена а у таймера происходит новое событие
Не получится.