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


Функция ExSetTimer (wdm.h)

Программа ExSetTimer запускает операцию таймера и задает срок действия таймера в указанное время выполнения.

Синтаксис

BOOLEAN ExSetTimer(
  [in]           PEX_TIMER           Timer,
  [in]           LONGLONG            DueTime,
  [in]           LONGLONG            Period,
  [in, optional] PEXT_SET_PARAMETERS Parameters
);

Параметры

[in] Timer

Указатель на структуру EX_TIMER. Эта структура представляет собой объект таймера, который ранее был выделен подпрограммой ExAllocateTimer.

[in] DueTime

Абсолютное или относительное время истечения срока действия таймера. Если значение параметра DueTime отрицательное, время истечения срока действия относительно текущего системного времени. В противном случае срок действия является абсолютным. Время истечения срока действия выражается в системных единицах времени (100-наносекундных интервалов). Абсолютное время истечения срока действия отслеживает любые изменения в системном времени; относительные сроки действия не влияют на изменения системного времени. Абсолютное время выражается как время, прошедшее в системных единицах времени с начала года 1601 года.

Параметр DueTime для таймер высокого разрешения должен быть относительным временем (отрицательным значением) или обычными проверками ошибок.

[in] Period

Необязательный период таймера в системных единицах времени (интервалы 100-nanosecond). Должно быть меньше или равно MAXLONG. Для таймера, который является однократным, а не периодическим, установите период нулю.

[in, optional] Parameters

Указатель на структуру EXT_SET_PARAMETERS. Вызывающий драйвер ранее назвал ExInitializeSetTimerParameters подпрограммой для инициализации этой структуры.

Возвращаемое значение

Эта подпрограмма возвращает TRUE, если он отменяет таймер, ожидающий в то время, когда была вызвана подпрограмма. В противном случае подпрограмма возвращает FALSE. Дополнительные сведения см. в разделе "Примечания".

Замечания

Драйвер может вызвать эту подпрограмму, чтобы задать срок действия таймера в будущем. Затем драйвер может ждать истечения срока действия таймера. Или драйвер может реализовать подпрограмму обратного вызова, вызываемую при истечении срока действия таймера.

После вызова драйвера ExSetTimerдрайвер может вызвать подпрограмму, например KeWaitForSingleObject или KeWaitForMultipleObjects, чтобы ждать истечения срока действия таймера. По истечении срока действия таймера операционная система сигнализирует объект таймера.

В качестве параметра драйвер может реализовать подпрограмму обратного вызова ExTimerCallback и указать указатель на эту подпрограмму в качестве входного параметра в подпрограмму ExAllocateTimer. По истечении срока действия таймера операционная система вызывает подпрограмму ExTimerCallback.

Вызов ExSetTimer неявно отменяет любую ранее запущенную операцию таймера для объекта таймера, указанного таймератаймера. Если драйвер ранее вызывался ExSetTimer, чтобы задать таймер, использующий таймер, и этот таймер еще не истек, когда ExSetTimer вызывается во второй раз, второй вызов отменяет таймер из первого вызова, а затем запускает новый таймер. В этом случае второй вызов возвращает TRUE. Однако если таймер, запущенный первым вызовом, истекает до того, как второй вызов может отменить этот таймер, второй вызов запускает новый таймер и возвращает FALSE.

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

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

Периодический таймер может истекает не более одного раза на часы системы. Установка периода таймера на значение меньше интервала между тиками системных часов не приводит к истечению срока действия таймера более одного раза в единицу часов системы, но может привести к изменению интервалов между последовательными сроками действия, если системная частота часов изменяется. Например, операционная система может временно увеличить частоту системных часов в соответствии с требованиями к времени таймера высокого разрешения. Дополнительные сведения см. в High-Resolution таймерах.

Для периодического таймера, который не является таймером высокого разрешения, драйвер может достичь относительно равномерного периодического истечения срока действия, задав период целое число целое число интервала по умолчанию между тиками системных часов.

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

Дополнительные сведения см. в подпрограммах ExXxxTimer и EX_TIMER объектах.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.1.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
библиотеки Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

См. также

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

KeWaitForMultipleObjects

KeWaitForSingleObject