Función ExSetTimer (wdm.h)

La rutina ExSetTimer inicia una operación del temporizador y establece que el temporizador expire en el momento de vencimiento especificado.

Sintaxis

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

Parámetros

[in] Timer

Puntero a una estructura de EX_TIMER . Esta estructura es un objeto de temporizador asignado previamente por la rutina ExAllocateTimer .

[in] DueTime

Hora absoluta o relativa en la que el temporizador va a expirar. Si el valor del parámetro DueTime es negativo, la hora de expiración es relativa a la hora actual del sistema. De lo contrario, la hora de expiración es absoluta. La hora de expiración se expresa en unidades de tiempo del sistema (intervalos de 100 nanosegundos). Los tiempos de expiración absolutos realizan un seguimiento de los cambios en la hora del sistema; los tiempos de expiración relativos no se ven afectados por los cambios de hora del sistema. Un tiempo absoluto se expresa como la cantidad de tiempo transcurrido, en unidades de tiempo del sistema, desde el inicio del año 1601.

El parámetro DueTime para un temporizador de alta resolución debe ser una hora relativa (valor negativo) o las comprobaciones de errores rutinarias.

[in] Period

Un período opcional para el temporizador en unidades de tiempo del sistema (intervalos de 100 nanosegundos). Debe ser menor o igual que MAXLONG. Para un temporizador que sea de un solo disparo en lugar de periódico, establezca Period en cero.

[in, optional] Parameters

Puntero a una estructura de EXT_SET_PARAMETERS . El controlador que llama anteriormente llamó a la rutina ExInitializeSetTimerParameters para inicializar esta estructura.

Valor devuelto

Esta rutina devuelve TRUE si cancela un temporizador que estaba pendiente en el momento en que se llamó a la rutina. De lo contrario, la rutina devuelve FALSE. Para obtener más información, vea la sección Comentarios.

Comentarios

El controlador puede llamar a esta rutina para establecer un temporizador que expire en un momento futuro. Después, el controlador puede esperar a que expire el temporizador. O bien, el controlador puede implementar una rutina de devolución de llamada a la que se llama cuando expira el temporizador.

Después de que un controlador llame a ExSetTimer, el controlador puede llamar a una rutina como KeWaitForSingleObject o KeWaitForMultipleObjects para esperar a que expire el temporizador. Cuando expira el temporizador, el sistema operativo indica el objeto del temporizador.

Como opción, el controlador puede implementar una rutina de devolución de llamada ExTimerCallback y proporcionar un puntero a esta rutina como parámetro de entrada a la rutina ExAllocateTimer . Cuando expira el temporizador, el sistema operativo llama a la rutina ExTimerCallback .

Una llamada a ExSetTimer cancela implícitamente cualquier operación set-timer iniciada previamente en el objeto de temporizador especificado por Timer. Si el controlador llamó anteriormente a ExSetTimer para establecer un temporizador que usa Timer y este temporizador aún no ha expirado cuando ExSetTimer se llama una segunda vez, la segunda llamada cancela el temporizador de la primera llamada y, a continuación, inicia el nuevo temporizador. En este caso, la segunda llamada devuelve TRUE. Sin embargo, si el temporizador iniciado por la primera llamada expira antes de que la segunda llamada pueda cancelar este temporizador, la segunda llamada inicia el nuevo temporizador y devuelve FALSE.

Si el parámetro Period es distinto de cero, el temporizador es periódico. Para un temporizador periódico, el parámetro DueTime especifica la hora de expiración inicial del temporizador y Period especifica el intervalo entre las expiraciones posteriores.

El temporizador de hardware utilizado para el reloj del sistema señala solicitudes de interrupción a intervalos uniformes, pero el control de estas interrupciones podría retrasarse mediante el procesamiento de interrupciones para otros dispositivos. Por lo tanto, para un temporizador periódico, el retraso de un tiempo de expiración periódico al momento en el que se señala el objeto del temporizador o la rutina ExTimerCallback puede variar de un período a otro. Para obtener más información, consulte Precisión del temporizador.

Un temporizador periódico no puede expirar más de una vez por tic del reloj del sistema. Establecer el período de un temporizador en un valor menor que el intervalo entre tics del reloj del sistema no hace que el temporizador expire más de una vez por tic del reloj del sistema, pero puede provocar que los intervalos entre expiraciones sucesivas variarán si cambia la velocidad del reloj del sistema. Por ejemplo, el sistema operativo podría aumentar temporalmente la velocidad de reloj del sistema para satisfacer los requisitos de tiempo de un temporizador de alta resolución. Para obtener más información, consulte Temporizadores de alta resolución.

Para un temporizador periódico que no es un temporizador de alta resolución, un controlador puede lograr expiraciones periódicas relativamente uniformes estableciendo Período en un entero múltiplo del intervalo predeterminado entre tics del reloj del sistema.

Para evitar un consumo excesivo de energía, un controlador no debe establecer el período de un temporizador de alta resolución de larga duración en un valor menor que el intervalo predeterminado entre los tics del reloj del sistema. De lo contrario, el temporizador del reloj del sistema generará continuamente interrupciones a la velocidad máxima permitida del reloj del sistema.

Para obtener más información, vea ExXxxTimer Routines and EX_TIMER Objects.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 8.1.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

Consulte también

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

KeWaitForMultipleObjects

KeWaitForSingleObject