Таймер. Создание таймера. Пример использования таймера. Тестирование работы таймера

Страницы работы

3 страницы (Word-файл)

Содержание работы

Лекция 14

Таймер_ 1

Создание таймера 1

Остановка таймера 1

Пример использования таймера 2

Тестирование работы таймера 3

Таймер

Создание таймера

Для создания системного таймера оконный класс может использовать функцию-член SetTimer ( ) класса CWnd со следующим прототипом:

UINT SetTimer ( UINT nIDEvent , UINT nElapse ,

                   void ( CALLBACK EXPORT* lpfnTimer ) (HWND , UINT , UINT , DWORD )) ;

Эта функция возвращает идентификатор таймера, если она выполнена успешно, и ноль противном случае. Параметры:

nIDEvent             идентификатор таймера;

nElapse                задает время срабатывания таймера в миллисекундах;

lpfnTimer             указатель на callback-функцию, которая обрабатывает сообщения WM_TIMER. Если этот параметр равен NULL, сообщения WM_TIMER помещаются в очередь сообщений приложения и обрабатываются оконным объектом.

По истечении времени в nElapse миллисекунд после установки таймера или предыдущего его срабатывания система посылает сообщение WM_TIMER в очередь приложения или передает его для обработки функции, на которую указывает параметр IpfnTimer. Прототип функции, на которую ссылается этот указатель, должен быть следующим:

void CALLBACK EXPORT

                   TimerProc ( HWND hWnd , UINT nMsg , UINT nIDEvent , DWORD dwTime ) ;

Здесь

hWnd                   дескриптор оконного объекта, который вызвал функцию SetTimer ( ),

nMsg                    идентификатор сообщения WM_TIMER,

nIDEvent             идентификатор таймера;

dwTime                системное время.

Имя этой функции не обязательно должно быть TimerProc, однако она должна возвращать 0.

Остановка таймера

Остановить установленный таймер можно с помощью функции-члена того же класса KillTimer ( ) со следующим прототипом:

BOOL KillTimer ( int nIDEvent ) ;

В качестве параметра nIDEvent этой функции передается идентификатор таймера. Функция возвращает TRUE, если таймер остановлен, и FALSE – если нет.

При размещении указанных функций в программе следует иметь в виду, что эти функции в конечном итоге вызывают функции Windows, каким передается в качестве параметра дескриптор окна, с которым связывается таймер. Это означает, что установка таймера не может быть произведена раньше, чем будет создано окно. Наиболее ранней в смысле выполнения программы точкой для установки таймера является обработчик события OnNcCreate ( ). Уничтожение таймера также должно производиться, когда окно еще существует. Последней возможностью для вас в этом смысле является обработчик события OnNcDestroy ( ) (но до вызова обработчика базового класса). Мы рекомендуем вам всегда делать это несколько раньше – в обработчике события OnClose ( ) или OnDestroy ( ).

Обработчик событий таймера называется OnTimer ( ) и имеет прототип:

afx_msg void OnTimer (UINT nIDEvent ) ;

Его единственный параметр nIDEvent задает идентификатор таймера. Эта функция вызывается операционной системой, чтобы позволить вашему приложению обработать сообщение Windows WM_TIMER. Параметр, передаваемый функции, отражает значение. которое он имел в момент получения его функцией окна приложения. Если вы вызовете в этом обработчике обработчик базового класса, этот последний будет использовать значение параметра, которое он имел в момент посылки сообщения WM_TIMER, а не значение, переданное вами.

Пример использования таймера

Рассмотрим пример, который не только демонстрирует основные приёмы использования с таймера, но и позволяет тестировать его работу. Диалоговое окно IDD_TIMER_DIALOG содержит три таймера. Первый и второй таймер создаются после щелчка на кнопке “Включить”. Время срабатывания каждого таймера пользователь может установить в соответствующих текстовых полях. Каждый таймер увеличивает значение соответствующего счётчика, которые также отображаются в текстовых полях. Второй таймер срабатывает реже, но увеличивает значение своего счётчика на большее значение. В среднем значения обоих счётчиков должны быть равны. Оба таймера останавливаются при щелчке на кнопке “Выключить”.

Похожие материалы

Информация о работе