Сведения о таймерах

В этом разделе описывается создание, определение, установка и удаление таймеров. Приложение использует таймер для планирования события для окна после истечения указанного времени. Каждый раз, когда указанное интервал (или значение времени ожидания) для таймера истекает, система уведомляет окно, связанное с таймером. Так как точность таймера зависит от скорости системных часов и частоты получения сообщений из очереди сообщений, значение времени ожидания только приблизительно.

Этот раздел включает следующие подразделы:

Операции таймера

Приложения создают таймеры с помощью функции SetTimer. Новый таймер начинает время интервала, когда он будет создан. Приложение может изменить значение времени ожидания таймера с помощью SetTimer и может уничтожить таймер с помощью функции KillTimer. Чтобы эффективно использовать системные ресурсы, приложения должны уничтожить таймеры, которые больше не нужны.

Каждый таймер имеет уникальный идентификатор. При создании таймера приложение может указать идентификатор или создать уникальное значение системы. Первый параметр сообщения WM_TIMER содержит идентификатор таймера, который опубликовал сообщение.

Если в вызове SetTimer указан дескриптор окна, приложение связывает таймер с этим окном. Всякий раз, когда время ожидания таймера истекает, система отправляет WM_TIMER сообщение в окно, связанное с таймером. Если в вызове SetTimer не указан дескриптор окна, приложение, создающее таймер, должно отслеживать очередь сообщений для WM_TIMER сообщений и отправлять их в соответствующее окно.

Примечание.

Если указать необязательную функцию обратного вызова TIMERPROC, функция вызывается во время цикла сообщений и WM_TIMER не отправляется обратному вызову WNDPROC.

Если вам нужно получать уведомления о истечении таймера, используйте таймер ожидания. Дополнительные сведения см. в разделе "Объекты таймера ожидания".

Таймер высокого разрешения

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

Если счетчик производительности с высоким разрешением существует в системе, можно использовать функцию QueryPerformanceFrequency для выражения частоты в счетчиках в секунду. Значение счетчика зависит от процессора. Например, на некоторых процессорах число может быть скоростью цикла часов процессора.

Функция QueryPerformanceCounter извлекает текущее значение счетчика производительности с высоким разрешением. Вызывая эту функцию в начале и конце раздела кода, приложение по сути использует счетчик в качестве таймера высокого разрешения. Например, предположим, что QueryPerformanceFrequency указывает, что частота счетчика производительности с высоким разрешением составляет 50 000 счетчиков в секунду. Если приложение вызывает QueryPerformanceCounter непосредственно до и сразу после времени ожидания раздела кода, значения счетчиков могут быть 1500 счетчиков и 3500 счетчиков соответственно. Эти значения указывают на то, что 04 секунды (2000 счетчиков) истекли во время выполнения кода.

Объекты таймера ожидания

Объект таймера ожидания — это объект синхронизации, состояние которого устанавливается для сигнала при поступлении указанного времени ожидания. Существует два типа таймеров ожидания, которые можно создать: сброс вручную и синхронизация. Таймер любого типа также может быть периодическим таймером.

Поток использует функцию CreateWaitableTimer или CreateWaitableTimerEx для создания объекта таймера. Создание потока указывает, является ли таймер вручную сбросом таймера или таймером синхронизации. Создающий поток может указать имя объекта таймера. Потоки в других процессах могут открывать дескриптор существующего таймера, указав его имя в вызове функции OpenWaitableTimer . Любой поток с дескриптором к объекту таймера может использовать одну из функций ожидания, чтобы ожидать, пока состояние таймера будет задано для сигнала.

Дополнительные сведения об использовании объектов таймера ожидания для синхронизации потоков см. в разделе "Объекты таймера ожидания".