Auf Englisch lesen

Freigeben über


Ereignisobjekte (Synchronisierung)

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

Object BESCHREIBUNG
Manuelles Zurücksetzungsereignis Ein Ereignisobjekt, dessen Zustand so lange signalisiert bleibt, bis es von der ResetEvent-Funktion explizit auf nicht signalisiert zurückgesetzt wird. Während es signalisiert wird, kann eine beliebige Anzahl von wartenden Threads oder Threads, die anschließend dasselbe Ereignisobjekt in einer der Wartefunktionen angeben, freigegeben werden.
Ereignis für automatisches Zurücksetzen Ein Ereignisobjekt, dessen Zustand so lange signalisiert bleibt, bis ein einzelner wartenden Thread freigegeben wird. Zu diesem Zeitpunkt legt das System den Zustand automatisch auf nicht signalisiert fest. Wenn sich keine Threads in Warteposition befinden, verbleibt das Ereignisobjekt im signalisierten Zustand. Wenn mehr als ein Thread wartet, wird ein wartenden Thread ausgewählt. Gehen Sie nicht von einer FIFO-Reihenfolge (First-In, First Out) aus. Externe Ereignisse wie Kernelmodus-APCs können die Wartereihenfolge ändern.

 

Das Ereignisobjekt ist nützlich, um ein Signal an einen Thread zu senden, das angibt, dass ein bestimmtes Ereignis aufgetreten ist. Beispielsweise legt das System bei überlappender Ein- und Ausgabe ein angegebenes Ereignisobjekt auf den signalierten Zustand fest, wenn der überlappende Vorgang abgeschlossen wurde. Ein einzelner Thread kann unterschiedliche Ereignisobjekte in mehreren gleichzeitigen überlappenden Vorgängen angeben und dann eine der Wartefunktionen mit mehreren Objekten verwenden, um auf den Status eines der Ereignisobjekte zu warten, die signalisiert werden.

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

Verwenden von Ereignisobjekten