Ereignisobjekte (Synchronisierung)
Ein Ereignisobjekt ist ein Synchronisierungsobjekt, dessen Zustand mithilfe der SetEvent-Funktion explizit auf signalisiert festgelegt werden kann. Es folgen die beiden Typen von Ereignisobjekten.
| Object | BESCHREIBUNG |
|---|---|
| Ereignis für manuelles Zurücksetzen | Ein Ereignisobjekt, dessen Zustand signalisiert bleibt, bis es von der ResetEvent-Funktion explizit auf nicht signalisiert zurückgesetzt wird. Während der Signalisierung kann eine beliebige Anzahl von wartenden Threads oder Threads, die anschließend dasselbe Ereignisobjekt in einer der Wartefunktionenangeben, freigegeben werden. |
| Ereignis für automatisches Zurücksetzen | Ein Ereignisobjekt, dessen Zustand 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, der angibt, dass ein bestimmtes Ereignis aufgetreten ist. Beispielsweise legt das System bei überlappender Eingabe und Ausgabe ein angegebenes Ereignisobjekt auf den signalisierten Zustand fest, wenn der überlappende Vorgang abgeschlossen wurde. Ein einzelner Thread kann verschiedene Ereignisobjekte in mehreren gleichzeitig überlappenden Vorgängen angeben und dann eine der Wartefunktionen mit mehreren Objekten verwenden, um auf den Zustand eines beliebigen Ereignisobjekts zu warten, das signalisiert wird.
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 mit manueller oder automatischer Zurücksetzung handelt. Der erstellende 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 seinen Namen in einem Aufruf der OpenEvent-Funktion angeben. Weitere Informationen zu Namen für Mutex-, Ereignis-, Semaphor- und Timerobjekte finden Sie unter Prozessübergreifende Synchronisierung.