Compartir a través de


Función ExSetTimer (wdm.h)

La rutina ExSetTimer inicia una operación de 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 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 expira. 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. El tiempo 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 en la 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 un tiempo relativo (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 un solo disparo en lugar de periódico, establezca Período en cero.

[in, optional] Parameters

Puntero a una estructura EXT_SET_PARAMETERS. El controlador de llamada llamó previamente 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 Comentarios.

Observaciones

El controlador puede llamar a esta rutina para establecer un temporizador para que expire en un momento futuro. A continuación, 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 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 ExSetTimer cancela implícitamente cualquier operación de temporizador establecida iniciada anteriormente en el objeto de temporizador especificado por Temporizador. 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 a 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 del temporizador inicial y Período especifica el intervalo entre las expiraciones posteriores.

El temporizador de hardware usado 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 una hora de expiración periódica a la hora en la que se señala el objeto del temporizador o el exTimerCallback rutina puede variar de un período a otro. Para obtener más información, vea 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 los 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 varían si cambia la velocidad del reloj del sistema. Por ejemplo, el sistema operativo podría aumentar temporalmente la velocidad del reloj del sistema para cumplir los requisitos de tiempo de un temporizador de alta resolución. Para obtener más información, vea High-Resolution Temporizadores.

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 los 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 inferior al 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 Valor
cliente mínimo admitido Disponible a partir de Windows 8.1.
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca de Ntoskrnl.lib
irQL <= DISPATCH_LEVEL

Consulte también

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

keWaitForMultipleObjects

KeWaitForSingleObject