| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Нужен совет по использованию таймеров |
| Автор: Xerx 20.2.2006, 10:29 |
| Допустим, у меня есть повторяющийся во времени процесс. Он состоит из стадий. Каждая стадия имеет свою длительность (в десятках{и сотнях} миллисекунд). Сразу по завершении текущей стадии начинается следующая. При завершении последней действие повторяется. Все управляется таймером. Он должен срабатывать на НЕКОТОРЫХ стадиях несколько раз, а на некоторых достаточно срабатываний на временных границах (т.е. в начале и в конце стадии). Каждая стадия нересурсоемка. Так вот, как лучше это сделать? Сделать один таймер, который будет вызываться с минимально необходимым периодом и в своем обработчике выбирать действия в зависимости от стадии, или работать с набором таймеров, создавая и уничтожая их для каждой стадии? Или как-то можно изменять параметры таймера без его пересоздания (по его идентификатору)? Кстати, длительности стадий не кратны (да и частота срабатываний тоже)! Т.е. может быть такой цикл 200(20 раз) - 35(1 раз) - 320(7 раз) - 87(2 раза). Ну, или кратно 5-10 милисекундам. Каково ваше мнение? Как лучше сделать? И почему?! |
| Автор: Snowy 20.2.2006, 10:42 |
| Лучше вообще отказаться от таймера. Создай новый поток, и выполняй все действия там. Периоды отмеряй через GetTickCount или через Sleep. Сможешь точно отмерять и указывать что и когда делать. А таймер штука неточная и зависит от многих факторов. |
| Автор: Yanis 20.2.2006, 11:26 | ||
Что то я не совсем понял вопрос, но если уж нужно использовать таймеры, то почему бы при запуске определённой стадии не вырубать таймер. Что то типа:
|
| Автор: Xerx 20.2.2006, 23:53 |
| Snowy > Попробую. Но заставлять все нити работать одновременно как-то нехорошо. Даже если некоторые из них будут простаивать в Sleep'е или через GetTickCount. Тогда уже надо, чтобы нити сами себя останавливали и запускали. Весьма ресурсоемко. Но, попробую.. Yanis > Проблема в том, что каждая стадия работает строго определенное время и имеет разное число вызовов таймера. Так что так не очень хорошо. |
| Автор: Демо 21.2.2006, 10:22 |
| Какие все? Ты разве написал, что у тебя параллельно должны выполняться некоторые стадии? Поставь задачу корректно. Тогда можно будет ее решать. |