Форум: "WinAPI";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Вниз
Нужен совет по использованию таймеров Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c