Funzione ExSetTimer (wdm.h)

La routine ExSetTimer avvia un'operazione timer e imposta la scadenza del timer alla scadenza specificata.

Sintassi

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

Parametri

[in] Timer

Puntatore a una struttura EX_TIMER . Questa struttura è un oggetto timer allocato in precedenza dalla routine ExAllocateTimer .

[in] DueTime

Ora assoluta o relativa in cui scade il timer. Se il valore del parametro DueTime è negativo, la scadenza è relativa all'ora di sistema corrente. In caso contrario, l'ora di scadenza è assoluta. L'ora di scadenza viene espressa in unità di tempo di sistema (intervalli di 100 nanosecondi). I tempi di scadenza assoluti tengono traccia delle modifiche apportate all'ora di sistema; le ore di scadenza relative non sono interessate dalle modifiche apportate all'ora di sistema. Un tempo assoluto viene espresso come quantità di tempo trascorso, in unità di tempo di sistema, dall'inizio dell'anno 1601.

Il parametro DueTime per un timer ad alta risoluzione deve essere un tempo relativo (valore negativo) o i controlli dei bug di routine.

[in] Period

Periodo facoltativo per il timer in unità di tempo di sistema (intervalli di 100 nanosecondi). Deve essere minore o uguale a MAXLONG. Per un timer con un solo colpo anziché periodico, impostare Period su zero.

[in, optional] Parameters

Puntatore a una struttura EXT_SET_PARAMETERS . Il driver chiamante precedentemente chiamato la routine ExInitializeSetTimerParameters per inizializzare questa struttura.

Valore restituito

Questa routine restituisce TRUE se annulla un timer in sospeso al momento della chiamata della routine. In caso contrario, la routine restituisce FALSE. Per altre informazioni, vedere la sezione Osservazioni.

Commenti

Il driver può chiamare questa routine per impostare un timer per scadere in un momento futuro. Il driver può quindi attendere la scadenza del timer. In alternativa, il driver può implementare una routine di callback che viene chiamata alla scadenza del timer.

Dopo che un driver chiama ExSetTimer, il driver può chiamare una routine come KeWaitForSingleObject o KeWaitForMultipleObjects per attendere la scadenza del timer. Alla scadenza del timer, il sistema operativo segnala l'oggetto timer.

Come opzione, il driver può implementare una routine di callback ExTimerCallback e fornire un puntatore a questa routine come parametro di input per la routine ExAllocateTimer . Alla scadenza del timer, il sistema operativo chiama la routine ExTimerCallback .

Una chiamata di ExSetTimer annulla in modo implicito qualsiasi operazione set-timer avviata in precedenza sull'oggetto timer specificato da Timer. Se il driver precedentemente denominato ExSetTimer per impostare un timer che usa Timer e questo timer non è ancora scaduto quando ExSetTimer viene chiamato una seconda volta, la seconda chiamata annulla il timer dalla prima chiamata e quindi avvia il nuovo timer. In questo caso, la seconda chiamata restituisce TRUE. Tuttavia, se il timer avviato dalla prima chiamata scade prima che la seconda chiamata possa annullare questo timer, la seconda chiamata avvia il nuovo timer e restituisce FALSE.

Se il parametro Period è diverso da zero, il timer è periodico. Per un timer periodico, il parametro DueTime specifica l'ora della scadenza del timer iniziale e Period specifica l'intervallo tra le scadenze successive.

Il timer hardware usato per il clock di sistema segnala le richieste di interruzione a intervalli uniformi, ma la gestione di questi interrupt potrebbe essere ritardata dall'elaborazione degli interrupt per altri dispositivi. Pertanto, per un timer periodico, il ritardo da una scadenza periodica all'ora in cui viene segnalato l'oggetto timer o le esecuzioni della routine ExTimerCallback possono variare da un periodo a quello successivo. Per altre informazioni, vedere Accuratezza timer.

Un timer periodico può scadere non più di una volta per ogni tick del clock di sistema. L'impostazione del periodo di un timer su un valore inferiore all'intervallo tra i tick di clock di sistema non determina la scadenza del timer più di una volta per ogni tick di clock di sistema, ma potrebbe causare la variazione degli intervalli tra le scadenze successive se la frequenza di clock di sistema cambia. Ad esempio, il sistema operativo potrebbe aumentare temporaneamente la frequenza di clock del sistema per soddisfare i requisiti di temporizzazione di un timer ad alta risoluzione. Per altre informazioni, vedere Timer ad alta risoluzione.

Per un timer periodico che non è un timer ad alta risoluzione, un driver può ottenere scadenze periodiche relativamente uniformi impostando Period su un multiplo intero dell'intervallo predefinito tra i tick di clock di sistema.

Per evitare un consumo eccessivo di energia, un driver non deve impostare il periodo di un timer ad alta risoluzione a esecuzione prolungata su un valore inferiore all'intervallo predefinito tra i tick del clock di sistema. In caso contrario, il timer dell'orologio di sistema genererà continuamente interrupt alla frequenza massima consentita del clock di sistema.

Per altre informazioni, vedere Routine di ExXxxTimer e oggetti EX_TIMER.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 8.1.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

Vedi anche

EXT_SET_PARAMETERS

EX_TIMER

ExAllocateTimer

ExInitializeSetTimerParameters

ExTimerCallback

KeWaitForMultipleObjects

KeWaitForSingleObject