Función WdfTimerStart (wdftimer.h)
[Se aplica a KMDF y UMDF]
El método WdfTimerStart inicia el reloj de un temporizador.
Sintaxis
BOOLEAN WdfTimerStart(
[in] WDFTIMER Timer,
[in] LONGLONG DueTime
);
Parámetros
[in] Timer
Identificador de un objeto de temporizador del marco que se obtuvo llamando a WdfTimerCreate.
[in] DueTime
Un período de tiempo, en unidades de tiempo del sistema (intervalos de 100 nanosegundos). El marco llama a la evtTimerFunc del controlador función de devolución de llamada cuando transcurre el período de tiempo especificado. El valor del período de tiempo puede ser negativo o positivo de la siguiente manera:
- Si el valor es negativo, el período de tiempo es relativo a la hora actual del sistema.
- Si el valor es positivo, el período de tiempo especifica una hora absoluta (que es realmente relativa al 1 de enero de 1601).
Advertencia
Si establece el miembro UseHighResolutionTimer de WDF_TIMER_CONFIG en WdfTrue, debe llamar a WdfTimerStart con el parámetro DueTime establecido en un valor negativo. De lo contrario, la llamada hace que el sistema se bloquee.
Los tiempos relativos no se ven afectados por ningún cambio en la hora del sistema que pueda producirse dentro del período de tiempo especificado. Las horas absolutas reflejan los cambios de hora del sistema.
El marco proporciona funciones de conversión de tiempo que convierten valores de tiempo en unidades de tiempo del sistema.
Valor devuelto
WdfTimerStart devuelve TRUE si el objeto de temporizador estaba en la cola del temporizador del sistema. De lo contrario, este método devuelve FALSE. Para obtener más información, vea la siguiente sección Comentarios.
Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.
Observaciones
Los controladores siempre deben llamar a WdfTimerStart para iniciar un temporizador después de crearlo, independientemente de si el temporizador es un temporizador periódico o no.
Después de que un controlador llame a WdfTimerStart, el marco llama al EvtTimerFunc del controlador función de devolución de llamada cuando transcurre el tiempo especificado para el parámetro dueTime . Después de esta primera llamada, el marco llama a la función de devolución de llamada cada vez que transcurre el período de tiempo especificado por el Período miembro de la estructura WDF_TIMER_CONFIG del controlador.
La expiración del temporizador depende en última instancia de la granularidad del reloj del sistema. El valor especificado para DueTime garantiza que el marco llama al EvtTimerFunc del controlador función de devolución de llamada en o después de la DueTime especificada. Sin embargo, WdfTimerStart no puede invalidar la granularidad del reloj del sistema, independientemente del valor especificado para DueTime.
Cuando un controlador llama a WdfTimerStart, su objeto de temporizador se agrega a la cola de objetos del temporizador del sistema. Si el temporizador no es un temporizador periódico, el sistema quita el objeto de temporizador de la cola después de que haya transcurrido el "tiempo de vencimiento" del temporizador. Si el temporizador es un temporizador periódico, el objeto de temporizador permanece en la cola hasta que el controlador llama a WdfTimerStop.
Un controlador puede llamar a WdfTimerStart desde su EvtTimerFunc función de devolución de llamada para reiniciar un temporizador no periódico después de que expire.
WdfTimerStart devuelve TRUE si el controlador ha llamado previamente a WdfTimerStart y el objeto de temporizador sigue en la cola del sistema porque el período de tiempo no ha transcurrido (o porque es un temporizador periódico). Antes de WdfTimerStart devuelve TRUE, el sistema operativo restablece el período de tiempo al valor especificado en la nueva llamada a WdfTimerStart. El marco llama a la función de devolución de llamada EvtTimerFunc solo después de que transcurra el nuevo período de tiempo.
Para detener el reloj del temporizador, el controlador puede llamar a WdfTimerStop.
Para obtener más información sobre los objetos del temporizador del marco, vea Using Timers.
Ejemplos
En el ejemplo de código siguiente se inicia un temporizador. El marco llamará a la función de devolución de llamada del temporizador EvtTimerFunc después de 10 milisegundos.
BOOLEAN inTimerQueue;
inTimerQueue = WdfTimerStart(
timerHandle,
WDF_REL_TIMEOUT_IN_MS(10)
);
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
versión mínima de KMDF | 1.0 |
versión mínima de UMDF | 2.0 |
encabezado de | wdftimer.h (incluya Wdf.h) |
biblioteca de | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
irQL | <=DISPATCH_LEVEL |
reglas de cumplimiento de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |