Шаг 59.
Использование таймера (общие сведения)

    На этом шаге мы приведем общие сведения по использованию таймера.

    Таймер является одним из мощных инструментов, предоставляемых операционной системой и позволяющих решать самые разнообразные задачи. С таймером вы познакомились, когда занимались консольными приложениями. Там мы пользовались функциями timeSetEvent и timeKillEvent. Для консольных приложений это очень удобные функции. В оконных приложениях чаще используют функции SetTimer и KillTimer. Особенность таймера, создаваемого функцией SetTimer, заключается в том, что сообщение WM_TIMER, которое начинает посылать система приложению после выполнения функции SetTimer, приходит со всеми другими сообщениями наравне, на общих основаниях. Следовательно, интервал между двумя приходами сообщения WM_TIMER может несколько варьироваться. В большинстве случаев это не существенно.

    У сообщения таймера есть еще одна особенность. Если система посылает сообщение приложению, а предыдущее сообщение еще стоит в очереди, то система объединяет эти два сообщения. Таким образом, "вынужденный простой" не приводит к приходу на приложение подряд нескольких сообщений таймера.

    Перечислим те задачи, которые можно решить с помощью таймера.

  1. Отслеживание времени: секундомер, часы и т. д. Нарушение периодичности здесь не имеет значения, так как по приходе сообщения время можно отследить, вызвав функцию получения системного времени.
  2. Таймер - один из способов осуществления многозадачности. Можно установить сразу несколько таймеров на разные функции, в результате периодически будет исполняться то одна, то другая функция.
  3. Периодический вывод на экран обновленной информации.
  4. Автосохранение - функция особенно полезная для редакторов.
  5. Задание темпа изменения каких-либо объектов на экране.
  6. Мультипликация - по приходе сообщения от таймера обновляется графическое содержимое экрана или окна, так что возникает эффект мультипликации.

    Рассмотрим, как нужно обращаться с функцией setTimer. Вот параметры этой функции:

    Если функция выполнилась успешно, то возвращаемым значением будет являться идентификатор таймера, который, естественно, будет совпадать со вторым параметром, если первый параметр будет отличным от NULL. В случае неудачи функция возвратит нуль.

    Из сказанного следует, что функция может быть вызвана тремя способами.

  1. Задан дескриптор окна, а четвертый параметр задается равным нулю.
  2. Задан дескриптор окна, а четвертый параметр определяет функцию, на которую будет приходить сообщение WM_TIMER.
  3. Дескриптор окна равен NULL, а четвертый параметр определяет функцию, на которую будет приходить сообщение WM_TIMER. Идентификатор таймера в этом случае будет определяться по возвращаемому функцией значению.

    Функция, на которую приходит сообщение WM_TIMER, имеет следующие параметры:

    Функция KillTimer удаляет созданный параметр и имеет следующие параметры:

    На следующем шаге мы рассмотрим пример программы, использующей таймер.




Предыдущий шаг Содержание Следующий шаг