Oggetti evento (sincronizzazione)

Un oggetto evento è un oggetto di sincronizzazione il cui stato può essere impostato in modo esplicito su segnalato tramite la funzione SetEvent . Di seguito sono riportati i due tipi di oggetto evento.

Oggetto Descrizione
Evento di reimpostazione manuale Oggetto evento il cui stato rimane segnalato fino a quando non viene reimpostato in modo esplicito in modo non assegnato dalla funzione ResetEvent . Anche se viene segnalato, è possibile rilasciare qualsiasi numero di thread in attesa o thread che specificano successivamente lo stesso oggetto evento in una delle funzioni di attesa.
Evento di reimpostazione automatica Oggetto evento il cui stato rimane segnalato fino a quando non viene rilasciato un singolo thread in attesa, al momento in cui il sistema imposta automaticamente lo stato su nonsignaled. Se non c'è alcun thread in attesa, lo stato dell'oggetto evento resta segnalato. Se è in attesa più di un thread, viene selezionato un thread in attesa. Non presupporre un ordine FIFO (first-out) first-out. Gli eventi esterni, ad esempio le API in modalità kernel, possono modificare l'ordine di attesa.

 

L'oggetto evento è utile per inviare un segnale a un thread che indica che si è verificato un evento specifico. Ad esempio, in input e output sovrapposti, il sistema imposta un oggetto evento specificato sullo stato segnalato al termine dell'operazione sovrapposta. Un singolo thread può specificare oggetti evento diversi in diverse operazioni sovrapposte simultanee, quindi usare una delle funzioni di attesa a più oggetti per attendere lo stato di uno degli oggetti evento da segnalare.

Un thread usa la funzione CreateEvent o CreateEventEx per creare un oggetto evento. Il thread di creazione specifica lo stato iniziale dell'oggetto e se si tratta di un oggetto evento di reimpostazione manuale o reimpostazione automatica. Il thread di creazione può anche specificare un nome per l'oggetto evento. I thread in altri processi possono aprire un handle a un oggetto evento esistente specificando il relativo nome in una chiamata alla funzione OpenEvent . Per altre informazioni sui nomi per gli oggetti mutex, evento, semaforo e timer, vedere Sincronizzazione interprocesso.

Uso di oggetti evento