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 de marco que se obtuvo mediante una llamada a WdfTimerCreate.

[in] DueTime

Período de tiempo, en unidades de tiempo del sistema (intervalos de 100 nanosegundos). El marco llama a la función de devolución de llamada EvtTimerFunc del controlador 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 realmente es 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 en la hora del sistema.

El marco proporciona funciones de conversión de tiempo que convierten valores de hora en unidades de tiempo del sistema.

Valor devuelto

WdfTimerStart devuelve TRUE si el objeto del 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 sección Comentarios que se muestra más adelante.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

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 a la función de devolución de llamada EvtTimerFunc del controlador 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 miembro Period del WDF_TIMER_CONFIG estructura 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 a la función de devolución de llamada EvtTimerFunc del controlador en o después del dueTime especificado. 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 de 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 función de devolución de llamada EvtTimerFunc 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 que WdfTimerStart devuelva TRUE, el sistema operativo restablece el período de tiempo al valor que el controlador especificó en la nueva llamada a WdfTimerStart. El marco llama a la función de devolución de llamada EvtTimerFunc solo después de que transcurre 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 de temporizador del marco, vea Uso de temporizadores.

Ejemplos

En el ejemplo de código siguiente se inicia un temporizador. El marco llamará a la función de devolución de llamada EvtTimerFunc del temporizador después de 10 milisegundos.

BOOLEAN inTimerQueue;

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

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdftimer.h (incluya Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

EvtTimerFunc

WDF_TIMER_CONFIG

WdfTimerCreate

WdfTimerStop