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


Функция WdfTimerStart (wdftimer.h)

[Применимо к KMDF и UMDF]

Метод WdfTimerStart запускает часы таймера.

Синтаксис

BOOLEAN WdfTimerStart(
  [in] WDFTIMER Timer,
  [in] LONGLONG DueTime
);

Параметры

[in] Timer

Дескриптор объекта таймера платформы, полученный путем вызова WdfTimerCreate.

[in] DueTime

Период времени в системных единицах времени (интервалы 100-nanosecond). Платформа вызывает функцию обратного вызова драйвера EvtTimerFunc при истечении указанного периода времени. Значение периода времени может быть отрицательным или положительным, как показано ниже.

  • Если значение отрицательное, период времени относительно текущего системного времени.
  • Если значение положительное, период времени указывает абсолютное время (которое фактически относительно 1 января 1601 г.).

Предупреждение

Если UseHighResolutionTimer член WDF_TIMER_CONFIGWdfTrue, необходимо вызвать WdfTimerStart с параметром DueTime значение отрицательного значения. В противном случае вызов приводит к сбою системы.

Относительные времена не влияют на системное время, которое может произойти в течение указанного периода времени. Абсолютное время отражает изменения системного времени.

Платформа предоставляет функции преобразования времени , которые преобразуют значения времени в системные единицы времени.

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

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

Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Замечания

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

После вызова драйвера WdfTimerStartплатформа вызывает функцию обратного вызова драйвера EvtTimerFunc, когда время, указанное для параметра DueTime истекает. После первого вызова платформа вызывает функцию обратного вызова каждый раз, когда период времени, указанный периодом члена WDF_TIMER_CONFIG структуры драйвера.

Срок действия таймера в конечном счете зависит от детализации системных часов. Значение, указанное для функции обратного вызова DueTime, гарантирует, что платформа вызывает функцию обратного вызова драйвера EvtTimerFunc или после указанной DueTime. Однако WdfTimerStart не может переопределить степень детализации системных часов, независимо от значения, указанного для DueTime.

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

Драйвер может вызывать WdfTimerStart из функции обратного вызова EvtTimerFunc, чтобы перезапустить не периодический таймер после истечения срока действия.

WdfTimerStart возвращает TRUE, если драйвер ранее вызвал WdfTimerStart и объект таймера по-прежнему находится в очереди системы, так как период времени не истек (или это периодический таймер). Перед WdfTimerStart возвращает TRUE, операционная система сбрасывает период времени в значение, указанное в новом вызове WdfTimerStart. Платформа вызывает функцию обратного вызова EvtTimerFunc только после истечения нового периода времени.

Чтобы остановить часы таймера, драйвер может вызвать WdfTimerStop.

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

Примеры

В следующем примере кода запускается таймер. Платформа вызовет функцию обратного вызова таймера EvtTimerF unc после 10 миллисекунда.

BOOLEAN inTimerQueue;

inTimerQueue = WdfTimerStart(
                             timerHandle,
                             WDF_REL_TIMEOUT_IN_MS(10)
                             );

Требования

Требование Ценность
целевая платформа Всеобщий
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
заголовка wdftimer.h (include Wdf.h)
библиотеки Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также

EvtTimerFunc

WDF_TIMER_CONFIG

WdfTimerCreate

WdfTimerStop