Freigeben über


Ereignisobjekte (Synchronisierung)

Ein Ereignisobjekt ist ein Synchronisierungsobjekt, dessen Status mithilfe der SetEvent--Funktion explizit auf signalisiert werden kann. Im Folgenden sind die beiden Ereignisobjekttypen aufgeführt.

Objekt Beschreibung
Ereignis für manuelles Zurücksetzen Ein Ereignisobjekt, dessen Zustand signalisiert bleibt, bis es explizit auf nicht signalisiert von der ResetEvent--Funktion zurückgesetzt wird. Es wird zwar signalisiert, aber eine beliebige Anzahl von Wartethreads oder Threads, die anschließend dasselbe Ereignisobjekt in einer der Wartefunktionenangeben, können freigegeben werden.
Ereignis zum automatischen Zurücksetzen Ein Ereignisobjekt, dessen Zustand bis zur Veröffentlichung eines einzelnen Wartethreads signalisiert bleibt, zu dem das System den Zustand automatisch auf "nicht signalisiert" festlegt. Wenn keine Threads warten, bleibt der Status des Ereignisobjekts signalisiert. Wenn mehr als ein Thread wartet, wird ein Wartethread ausgewählt. Gehen Sie nicht von einer First-In-First-Out-Reihenfolge (First-Out, FIFO) aus. Externe Ereignisse wie Kernelmodus-APCs können die Wartereihenfolge ändern.

 

Das Ereignisobjekt ist nützlich, um ein Signal an einen Thread zu senden, der angibt, dass ein bestimmtes Ereignis aufgetreten ist. Beispielsweise legt das System bei überlappender Eingabe und Ausgabe ein angegebenes Ereignisobjekt auf den signalierten Zustand fest, wenn der überlappende Vorgang abgeschlossen wurde. Ein einzelner Thread kann unterschiedliche Ereignisobjekte in mehreren gleichzeitig überlappenden Vorgängen angeben. Verwenden Sie dann eine der Mehrfachobjekt-Wait-Funktionen warten, bis der Zustand eines der Ereignisobjekte signalisiert wird.

Ein Thread verwendet die CreateEvent oder CreateEventEx--Funktion, um ein Ereignisobjekt zu erstellen. Der Erstellungsthread gibt den Anfangszustand des Objekts an und gibt an, ob es sich um ein manuelles Zurücksetzen oder automatisches Zurücksetzen eines Ereignisobjekts handelt. Der Erstellungsthread kann auch einen Namen für das Ereignisobjekt angeben. Threads in anderen Prozessen können ein Handle für ein vorhandenes Ereignisobjekt öffnen, indem er seinen Namen in einem Aufruf der OpenEvent--Funktion angibt. Weitere Informationen zu Namen für Mutex-, Ereignis-, Semaphor- und Timerobjekte finden Sie unter Interprocess Synchronization.

Verwenden von Ereignisobjekten