Вниз
Скачать: CL | DM;

Нужен совет по использованию таймеров   Найти похожие ветки 

 
Xerx ©   (2006-02-20 10:27) [0]

Допустим, у меня есть повторяющийся во времени процесс. Он состоит из стадий. Каждая стадия имеет свою длительность (в десятках{и сотнях} миллисекунд). Сразу по завершении текущей стадии начинается следующая. При завершении последней действие повторяется. Все управляется таймером. Он должен срабатывать на НЕКОТОРЫХ стадиях несколько раз, а на некоторых достаточно срабатываний на временных границах (т.е. в начале и в конце стадии). Каждая стадия нересурсоемка.
Так вот, как лучше это сделать? Сделать один таймер, который будет вызываться с минимально необходимым периодом и в своем обработчике выбирать действия в зависимости от стадии, или работать с набором таймеров, создавая и уничтожая их для каждой стадии? Или как-то можно изменять параметры таймера без его пересоздания (по его идентификатору)?
Кстати, длительности стадий не кратны (да и частота срабатываний тоже)! Т.е. может быть такой цикл 200(20 раз) - 35(1 раз) - 320(7 раз) - 87(2 раза). Ну, или кратно 5-10 милисекундам.
Каково ваше мнение? Как лучше сделать? И почему?!


 
RO   (2006-02-20 13:09) [1]

Приведи пример "стадии" в коде либо в псевдокоде ..


 
Xerx ©   (2006-02-20 23:57) [2]

Чисто эмпирический код. Не мой.


<обработка таймера>
case State of
 state_1:
   begin
      ElapsedTime := OldTime - GetTickCount();
      inc(TotalTime, ElapsedTime);

      if (TotalTime >= MaxTime[state_1]) then
      begin
        State := state_2;
        OldTime := GetTickCount();
        TotalTime := 0;
        exit;
      end;

      if (ElapsedTime >= State_1_interval) then
        do_something_work();
   end;

 state_2: begin ... end;
 ...
end;


Ну, вроде так.


 
RO   (2006-02-21 08:20) [3]

do_something_work() - блокирующая ф-ция ?
Где гарантия что время ее выполнения будет заведомо меньше периода срабатывания таймера ?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.04 c
2-1145709298
Ку Ку
2006-04-22 16:34
2006.05.14
Дополнительная кнопка


2-1146109264
Ezorcist
2006-04-27 07:41
2006.05.14
If (a=b) and (c=d) then...


2-1145651181
Галинка
2006-04-22 00:26
2006.05.14
Где найти исключения/ошибки в Дельфи


2-1145893826
alkin
2006-04-24 19:50
2006.05.14
Используя ADO, подключается Access-база


2-1145789779
sysop
2006-04-23 14:56
2006.05.14
Выравнивание строки




   Наверх