Obiekty zdarzeń (synchronizacja)
Obiekt zdarzenia jest obiektem synchronizacji, którego stan można jawnie ustawić na zasygnalizowany za pomocą funkcji SetEvent. Poniżej przedstawiono dwa typy obiektów zdarzeń.
Sprzeciwiać się | Opis |
---|---|
Zdarzenie resetowania ręcznego | Obiekt zdarzenia, którego stan pozostaje zasygnalizowany, dopóki nie zostanie jawnie zresetowany do niepodpisanego przez funkcję ResetEvent. Gdy jest ona sygnalizowana, dowolna liczba oczekujących wątków lub wątków, które następnie określają ten sam obiekt zdarzenia w jednej z funkcji oczekiwania , można zwolnić. |
Zdarzenie automatycznego resetowania | Obiekt zdarzenia, którego stan pozostaje zasygnalizowany do momentu zwolnienia pojedynczego wątku oczekiwania, w którym system automatycznie ustawia stan na niepodpisany. Jeśli żaden wątek nie czeka, stan obiektu zdarzenia pozostaje zasygnalizowany. Jeśli czeka więcej niż jeden wątek, zostanie wybrany wątek oczekiwania. Nie należy zakładać kolejności pierwszy na wyjścia (FIFO). Zdarzenia zewnętrzne, takie jak interfejsy API trybu jądra, mogą zmieniać kolejność oczekiwania. |
Obiekt zdarzenia jest przydatny podczas wysyłania sygnału do wątku wskazującego, że wystąpiło określone zdarzenie. Na przykład w nakładających się danych wejściowych i wyjściowych system ustawia określony obiekt zdarzenia na stan sygnalizowany po zakończeniu nakładanej operacji. Pojedynczy wątek może określać różne obiekty zdarzeń w kilku jednoczesnych nakładających się operacjach, a następnie użyć jednej z funkcji oczekiwania czekać na stan dowolnego obiektu zdarzenia, który ma być zasygnalizowany.
Wątek używa funkcji CreateEvent lub CreateEventEx w celu utworzenia obiektu zdarzenia. Wątek tworzenia określa początkowy stan obiektu i określa, czy jest to obiekt zdarzenia resetowania ręcznego lub automatycznego resetowania. Wątek tworzenia może również określać nazwę obiektu zdarzenia. Wątki w innych procesach mogą otwierać dojście do istniejącego obiektu zdarzenia, określając jego nazwę w wywołaniu funkcji OpenEvent. Aby uzyskać dodatkowe informacje o nazwach obiektów mutex, event, semaphore i timer, zobacz Interprocess Synchronization.
Tematy pokrewne