Цитата:
Сообщение от poli-smen
Нет. Стандартный таймер можно либо создать, либо удалить - приостановить нельзя.
|
Спасибо. Жаль конечно. А система нормально отнесется к частому удалению/созданию таймера, не будет "глючить"?
Цитата:
Сообщение от poli-smen
Чтобы не вызывалась повторно процедура до завершения своей работы, сделай переменную и при входе в эту процедуру проверяй её состояние:
Код:
SetTimer(hwnd_1C, Timer_Interval, Timer_Interval, @TimerProc1C); // устанавливаем таймер
var
TimerEntered: Boolean = False;
.....
function TimerProc1C()
if TimerEntered then Exit;
try
TimerEntered:=True;
// Делаем что-то
finally
TimerEntered:=False;
end;
end;
|
Я так делал. Как мне кажется не помогает. На слабом компе, видимо, эти таймеры становятся в очередь, и по освобождению процессора начинают выполнятся по очереди. На компе это видно по торможению, и неадекватной работе. Даже после нажатия кнопки остановки таймера, идет обработка очереди (накопившихся таймеров). И несколько секунд приложение не реагирует..
Все таки решил сделать через KillTimer()/SetTimer()
Попутный вопрос, в конструкции всегда будет вызван finally?
Код:
if TimerEntered then Exit;
try
TimerEntered:=True;
try
// Делаем что-то
except On E : Exception do
begin
// обработка ошибок
exit; // после этого оператора, будет вызван finally?
end;
// опять что-то делаем
end;
finally
TimerEntered:=False;
end;