Поделиться через


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

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

Этот раздел содержит следующие разделы.

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

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

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

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

Заметка

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

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

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

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

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

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

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

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

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

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