Condividi tramite


Funzione KePulseEvent (ntddk.h)

Il KePulseEvent routine imposta in modo atomico un oggetto evento su uno stato segnalato, tenta di soddisfare il maggior numero possibile di attese e quindi reimposta l'oggetto evento su uno stato non segnalato.

Sintassi

LONG KePulseEvent(
  [in, out] PRKEVENT  Event,
  [in]      KPRIORITY Increment,
  [in]      BOOLEAN   Wait
);

Parametri

[in, out] Event

Puntatore a un oggetto dispatcher di tipo KEVENT.

[in] Increment

Specifica un boost da applicare alla priorità dei thread che vengono letti come risultato della pulsazione dell'evento. In genere è impostato su zero, ma può essere impostato su uno.

[in] Wait

Specifica un valore booleano che indica se la chiamata a KePulseEvent verrà immediatamente seguita da una chiamata a una delle routine KeWaitXxx. Se TRUE, la chiamata KePulseEvent viene immediatamente seguita da una chiamata a KeWaitForMultipleObjects, KeWaitForMutexObjecto KeWaitForSingleObject. Per altre informazioni, vedere la sezione Osservazioni seguente.

Valore restituito

Stato del segnale precedente dell'oggetto evento.

Osservazioni

Per altre informazioni sugli oggetti evento, vedere Oggetti evento.

La routine KePulseEvent potrebbe generare temporaneamente irQL. Se il parametro wait è FALSE, la routine, prima che venga restituita, ripristina il runtime di integrazione sul valore originale che aveva all'inizio della chiamata.

Se Wait = TRUE, la routine restituisce senza abbassare irQL. In questo caso, la chiamata KePulseEvent deve essere immediatamente seguita da una chiamata KeWaitXxx. Impostando Wait = TRUE, il chiamante può impedire che si verifichi un cambio di contesto non necessario tra la chiamata KePulseEvent e la chiamata KeWaitXxx. La routine KeWaitXxx, prima che venga restituita, ripristina il valore originale di IRQL all'inizio della chiamata KePulseEvent. Sebbene IRQL disabiliti i commutatori di contesto tra le due chiamate, queste chiamate non possono essere usate in modo affidabile come inizio e fine di un'operazione atomica. Ad esempio, tra queste due chiamate, un thread in esecuzione contemporaneamente in un altro processore potrebbe modificare lo stato dell'oggetto evento o della destinazione dell'attesa.

Se il chiamante è in esecuzione in IRQL = DISPATCH_LEVEL o in un contesto di thread arbitrario, il parametro timeout per KeWaitXxx deve essere zero.

Avvertimento

Se un thread in attesa di event esegue attualmente un APC del kernel, quando viene chiamato KePulseEvent, l'attesa del thread non viene soddisfatta. Al termine del kernel APC, il thread rimane nello stato di attesa.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile a partire da Windows 2000.
piattaforma di destinazione Universale
intestazione ntddk.h (include Ntddk.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
regole di conformità DDI HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm)

Vedere anche

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject