Ассемблер для Windows


Примеры программ использующих таймер



Глава 1. Примеры программ, использующих таймер

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

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

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

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






    • 1-й параметр - дескриптор окна, с которым ассоциируется таймер. Если этот параметр сделать равным NULL (0), то будет проигнорирован и второй параметр.
    • 2-й параметр - определяет идентификатор таймера.
    • 3-й параметр - определяет интервал посылки сообщения WM_TIMER.
    • 4-й параметр - определяет адрес функции, на которую будет приходить сообщение WM_TIMER. Если параметр равен NULL, то сообщение будет приходить на функцию окна.


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

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



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


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



        • 1-й параметр - дескриптор окна, с которым ассоциирован таймер.
        • 2-й параметр - сообщение WM_T1MER.
        • 3-й параметр - идентификатор таймера.
        • 4-й параметр - время в миллисекундах, которое прошло с момента запуска Windows.


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



          • 1-й параметр - дескриптор окна.
          • 2-й параметр - идентификатор таймера.



          • Содержание раздела