Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Нужен совет по использованию таймеров


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

Автор: _hunter 20.2.2006, 11:09
позасовывай все стадии в потоки.
тогда кратность будет реализовываться while' ом, а время -- slep' ом.
следущую задачу запускать из завершающегося потока ( можно ( точнее нужно ) и менеджер потоков прикрутить и запускать задачи из него )

Автор: Fixin 20.2.2006, 23:18
ИМХО, потоки не пойдут. а версия со "слип"-ом не пойдет тк я понял, что стадии должны работать по сколько-то миллимекунд, а не паузы делать на промежуток. лучше менять параметры таймера и огранизовать удобную таблицу стадия-время-колво пвторений.

Автор: Xerx 20.2.2006, 23:47
Fixin > В идеале, конечно, менять параметры таймера. Но как-то это можно сделать без пересоздания?

Автор: Aleksandor 21.2.2006, 10:50
Цитата(Xerx @ 20.2.2006, 23:47)
Fixin > В идеале, конечно, менять параметры таймера. Но как-то это можно сделать без пересоздания?

SetTimer с идентификатором уже существующего таймера, но новым интервалом

Автор: Xerx 21.2.2006, 15:54
Да? Интересно... Попробую. А ресурсы точно не ест?

Автор: Fixin 21.2.2006, 20:53
Цитата(Xerx @ 21.2.2006, 15:54 Найти цитируемый пост)
А ресурсы точно не ест?
Ну, это сколько таймеров нащелкаешь. Если один - то нет. При создании проверяешь - создался или нет, вот и все. Если нет - ошибка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)