Пример ниже использует функцию SetTimer, чтобы создать два таймера. Первый таймер срабатывает каждые
10 секунд, второй - каждые 5 минут.
Демонстрационный пример
// Установим два таймера.
SetTimer(hwnd, // дескриптор главного окна
IDT_TIMER1, // идентификатор таймера
10000, // 10-секундный интервал
(TIMERPROC) NULL); // не вызвать обратно таймер
SetTimer(hwnd, // дескриптор главного окна
IDT_TIMER2, // идентификатор таймера
300000, // пятиминутный интервал
(TIMERPROC) NULL); // не вызвать обратно таймер
Чтобы обрабатывать сообщения WM_TIMER, создаваемые этими таймерами, в оконную процедуру для параметра hwnd
добавим в оператор выбора (case-оператор) WM_TIMER.
Прикладная программа также может создавать таймер, сообщения WM_TIMER которого обрабатываются не главной оконной процедурой, а определяемой программой функцией
повторного вызова, как это в нижеследующем примере кода, который создает таймер и использует функцию повторного вызова MyTimerProc обрабатывающую сообщения WM_TIMER таймера.
Соглашение о вызове MyTimerProc должно быть основано на функции повторного вызова TimerProc.
Если ваша прикладная программа создает таймер без определения дескриптора окна, ваше приложение должно отслеживать в очереди сообщений сообщения WM_TIMER
и распределять их в соответствующее окно.
Обратите внимание! на то, что функция GetMessage может возвратить (минус) -1, если
имеется ошибка.
Демонстрационный пример
HWND hwndTimer; // дескриптор окна для сообщений таймера
MSG msg; // структура сообщений
while (GetMessage(&msg, // структура сообщений
NULL, // дескриптор окна, которое получает сообщение
NULL, // самое нижнее сообщение, которое проверяется
NULL) // самое верхнее сообщение, которое проверяется
!= 0 &&GetMessage(&msg, NULL, NULL, NULL) != -1)
{
// Пошлем сообщение WM_TIMER в параметре hwndTimer процедуры.
if (msg.message ==WM_TIMER)
{
msg.hwnd = hwndTimer;
} TranslateMessage(&msg); // трансляция кодов виртуальных клавиш
DispatchMessage(&msg); // распределяет сообщения окна
}