Функция WdfTimerStart (wdftimer.h)
[Относится к KMDF и UMDF]
Метод WdfTimerStart запускает часы таймера.
Синтаксис
BOOLEAN WdfTimerStart(
[in] WDFTIMER Timer,
[in] LONGLONG DueTime
);
Параметры
[in] Timer
Дескриптор объекта таймера платформы, полученный путем вызова WdfTimerCreate.
[in] DueTime
Период времени в системных единицах времени (100-наносекундные интервалы). Платформа вызывает функцию обратного вызова EvtTimerFunc драйвера по истечении указанного периода времени. Значение периода времени может быть отрицательным или положительным следующим образом:
- Если значение отрицательное, период времени относительно текущего системного времени.
- Если значение положительное, период времени указывает абсолютное время (фактически относительно 1 января 1601 г.).
Предупреждение
Если для элемента UseHighResolutionTimerWDF_TIMER_CONFIG задано значение WdfTrue, необходимо вызвать WdfTimerStart с отрицательным значением для параметра DueTime . В противном случае вызов приведет к аварийному завершению работы системы.
Изменения системного времени, которые могут произойти в течение указанного периода времени, не влияют на относительное время. Абсолютное время отражает изменения системного времени.
Платформа предоставляет функции преобразования времени , которые преобразуют значения времени в системные единицы времени.
Возвращаемое значение
WdfTimerStart возвращает значение TRUE , если объект таймера находился в очереди таймера системы. В противном случае этот метод возвращает значение FALSE. Дополнительные сведения см. в разделе "Примечания".
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Драйверы всегда должны вызывать WdfTimerStart , чтобы запустить таймер после его создания, независимо от того, является ли таймер периодическим.
После вызова драйвером WdfTimerStart платформа вызывает функцию обратного вызова EvtTimerFunc драйвера по истечении времени, указанного для параметра DueTime . После этого первого вызова платформа вызывает функцию обратного вызова каждый раз, когда истекает период времени, заданный элементом Periodструктуры WDF_TIMER_CONFIG драйвера.
Срок действия таймера в конечном счете зависит от степени детализации системных часов. Значение, указанное для DueTime , гарантирует, что платформа вызывает функцию обратного вызова EvtTimerFunc драйвера в заданном DueTime или после нее. Однако WdfTimerStart не может переопределить степень детализации системных часов независимо от значения, указанного для DueTime.
Когда драйвер вызывает WdfTimerStart, его объект таймера добавляется в очередь системных объектов таймера. Если таймер не является периодическим, система удаляет объект таймера из очереди после истечения срока его выполнения. Если таймер является периодическим, объект таймера остается в очереди до тех пор, пока драйвер не вызовет WdfTimerStop.
Драйвер может вызвать WdfTimerStart из функции обратного вызова EvtTimerFunc , чтобы перезапустить не периодический таймер после его истечения.
WdfTimerStart возвращает значение TRUE , если драйвер ранее вызывал WdfTimerStart и объект таймера по-прежнему находится в очереди системы, так как период времени не истек (или является периодическим таймером). Прежде чем WdfTimerStart возвращает значение TRUE, операционная система сбрасывает период времени до значения, указанного драйвером в новом вызове WdfTimerStart. Платформа вызывает функцию обратного вызова EvtTimerFunc только по истечении нового периода времени.
Чтобы остановить часы таймера, драйвер может вызвать WdfTimerStop.
Дополнительные сведения об объектах таймера платформы см. в разделе Использование таймеров.
Примеры
В следующем примере кода запускается таймер. Платформа вызовет функцию обратного вызова EvtTimerFunc таймера через 10 миллисекунда.
BOOLEAN inTimerQueue;
inTimerQueue = WdfTimerStart(
timerHandle,
WDF_REL_TIMEOUT_IN_MS(10)
);
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdftimer.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |