Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.14;
Скачать: 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 вся ветка

Текущий архив: 2006.05.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.037 c
3-1143039657
Ega23
2006-03-22 18:00
2006.05.14
Text vs. Image Data Type


2-1145795773
Alex7
2006-04-23 16:36
2006.05.14
TDataSet


4-1140444642
salexn
2006-02-20 17:10
2006.05.14
Написание Native NT приложения


2-1145887691
Интересующийся
2006-04-24 18:08
2006.05.14
Временная задержка между событиями


15-1145353533
Pazitron_Brain
2006-04-18 13:45
2006.05.14
Попала в руки флэшка