Выдержать "паузу" в приложении.
Добавлено: 20 сен 2007, 18:05
Представим себе такую ситуацию.
Имеется Windows-приложение, оконная процедура обработки Windows-событий (не важно, с использованием MFC или нет). И в некоторой точке этой процедуры требуется реализовать следующую логику. Выждать тайм-аут (скажем, минуту), после чего выполнить следующее действие.
Как это красиве сделать?
Тупо выждать Sleep (60000) совсем некрасиво. Так как в этом случае приложение на эту минуту совсем "умрет" - не будет реагировать ни на какие другие события.
То есть, идеально красиво было бы здесь выйти из процедцуры-обработчика событий, а через требуемое время получить какое-то определенное Windows-событие и тут уже продолжить свои дальнейшие действия.
Можно, конечно через SetTimer (... 60000). Т.е. взводим таймер, тут же выходим из обработчика и спокойно ждем, когда таймер опять же вызовет процедцру-обработчик. Там этот таймер убиватся (KillTimer) и делается требуемое действие.
Вроде бы уже красивее, но если такие ситуации в дальнейшем будет возникать постоянно, то хороши ли это будут такие частые установки/убивания таймера? Как это (частые вызовы SetTimer/KillTimer) вообще влияет на ресурсы/производительность Windows?
Опять же MSDN пишет, что таймеры в Windows - ограниченные ресурсы. И, в принципе, вызов SetTimer может обернуться неудачей. Т.е. еще вот такой "подводный камень":
Timers are a limited global resource; therefore it is important that an application check the value returned by the SetTimer member function to verify that a timer is actually available.
Может быть, есть еще какие-то способы?
Заранее спасибо.
Имеется Windows-приложение, оконная процедура обработки Windows-событий (не важно, с использованием MFC или нет). И в некоторой точке этой процедуры требуется реализовать следующую логику. Выждать тайм-аут (скажем, минуту), после чего выполнить следующее действие.
Как это красиве сделать?
Тупо выждать Sleep (60000) совсем некрасиво. Так как в этом случае приложение на эту минуту совсем "умрет" - не будет реагировать ни на какие другие события.
То есть, идеально красиво было бы здесь выйти из процедцуры-обработчика событий, а через требуемое время получить какое-то определенное Windows-событие и тут уже продолжить свои дальнейшие действия.
Можно, конечно через SetTimer (... 60000). Т.е. взводим таймер, тут же выходим из обработчика и спокойно ждем, когда таймер опять же вызовет процедцру-обработчик. Там этот таймер убиватся (KillTimer) и делается требуемое действие.
Вроде бы уже красивее, но если такие ситуации в дальнейшем будет возникать постоянно, то хороши ли это будут такие частые установки/убивания таймера? Как это (частые вызовы SetTimer/KillTimer) вообще влияет на ресурсы/производительность Windows?
Опять же MSDN пишет, что таймеры в Windows - ограниченные ресурсы. И, в принципе, вызов SetTimer может обернуться неудачей. Т.е. еще вот такой "подводный камень":
Timers are a limited global resource; therefore it is important that an application check the value returned by the SetTimer member function to verify that a timer is actually available.
Может быть, есть еще какие-то способы?
Заранее спасибо.