Шаг 59.
Использование таймера (общие сведения)
На этом шаге мы приведем общие сведения по использованию таймера.
Таймер является одним из мощных инструментов, предоставляемых операционной системой и позволяющих решать самые разнообразные задачи.
С таймером вы познакомились, когда занимались консольными приложениями. Там мы пользовались функциями
timeSetEvent и timeKillEvent. Для консольных приложений это очень удобные функции. В оконных приложениях чаще
используют функции SetTimer и KillTimer. Особенность
таймера, создаваемого функцией SetTimer, заключается в том, что сообщение WM_TIMER, которое начинает посылать система приложению
после выполнения функции SetTimer, приходит со всеми другими сообщениями наравне, на общих основаниях. Следовательно, интервал между двумя приходами
сообщения WM_TIMER может несколько варьироваться. В большинстве случаев это не существенно.
У сообщения таймера есть еще одна особенность. Если система посылает сообщение приложению, а предыдущее сообщение еще стоит в очереди,
то система объединяет эти два сообщения. Таким образом, "вынужденный простой" не приводит к приходу на приложение подряд нескольких сообщений
таймера.
Перечислим те задачи, которые можно решить с помощью таймера.
- Отслеживание времени: секундомер, часы и т. д. Нарушение периодичности здесь не имеет значения, так как по приходе сообщения время
можно отследить, вызвав функцию получения системного времени.
- Таймер - один из способов осуществления многозадачности. Можно
установить сразу несколько таймеров на разные функции, в результате
периодически будет исполняться то одна, то другая функция.
- Периодический вывод на экран обновленной информации.
- Автосохранение - функция особенно полезная для редакторов.
- Задание темпа изменения каких-либо объектов на экране.
- Мультипликация - по приходе сообщения от таймера обновляется графическое содержимое экрана или окна, так что возникает эффект мультипликации.
Рассмотрим, как нужно обращаться с функцией setTimer. Вот параметры этой функции:
- 1-й параметр - дескриптор окна, с которым ассоциируется таймер. Если
этот параметр сделать равным NULL (0), то будет проигнорирован и второй параметр;
- 2-й параметр - определяет идентификатор таймера;
- 3-й параметр - определяет интервал посылки сообщения WM_TIMER;
- 4-й параметр - определяет адрес функции, на которую будет приходить
сообщение WM_TIMER. Если параметр равен NULL, то сообщение будет приходить на функцию окна.
Если функция выполнилась успешно, то возвращаемым значением будет являться идентификатор таймера, который, естественно, будет совпадать со вторым параметром,
если первый параметр будет отличным от NULL. В случае неудачи функция возвратит нуль.
Из сказанного следует, что функция может быть вызвана тремя способами.
- Задан дескриптор окна, а четвертый параметр задается равным нулю.
- Задан дескриптор окна, а четвертый параметр определяет функцию, на которую будет приходить сообщение WM_TIMER.
- Дескриптор окна равен NULL, а четвертый параметр определяет функцию, на которую будет приходить сообщение WM_TIMER.
Идентификатор таймера в этом случае будет определяться по возвращаемому функцией значению.
Функция, на которую приходит сообщение WM_TIMER, имеет следующие параметры:
- 1-й параметр - дескриптор окна, с которым ассоциирован таймер;
- 2-й параметр - сообщение WM_TIMER;
- 3-й параметр - идентификатор таймера;
- 4-й параметр - время в миллисекундах, прошедшее с момента запуска Windows.
Функция KillTimer удаляет созданный параметр и имеет следующие параметры:
- 1-й параметр - дескриптор окна;
- 2-й параметр - идентификатор таймера.
На следующем шаге мы рассмотрим пример программы, использующей таймер.
Предыдущий шаг
Содержание
Следующий шаг