CEvent

Obiekt klasy CEvent reprezentuje "zdarzenie" — obiekt synchronizacji, który umożliwia jeden wątek, aby notyfikują wzajemnie, że zdarzenie miało miejsce. Zdarzenia są przydatne, gdy wątek musi wiedzieć, kiedy do wykonywania jej zadań. Na przykład wątek, który kopiuje dane do archiwizacji danych musiałby być powiadamiany, gdy dostępne są nowe dane. Za pomocą obiektu CEvent do powiadamiania wątku kopii, gdy dostępne są nowe dane, Wątek można wykonywać swoje zadania tak szybko, jak to możliwe.

CEvent obiekty mają dwa typy: ręczne i automatyczne. Podręcznik CEvent obiektu pozostanie w stanie ustalonym przez SetEvent lub ResetEvent , aż do innych funkcji. Obiekt CEvent automatyczne automatycznie wróci do nonsignaled Państwo (niedostępne) po zwolnieniu co najmniej jeden wątek.

Aby użyć obiektu CEvent , konstruowania obiektu CEvent , gdy jest to konieczne. Określ nazwę zdarzenia chcesz czekać, oraz że aplikacja początkowo powinien należeć ona. Następnie można uzyskać dostęp zdarzenie, kiedy zwraca konstruktora. Wywołanie funkcji SetEvent: sygnału (udostępnia) obiektu zdarzenia, a następnie wywołać Unlock , gdy skończysz uzyskiwania dostępu do zasobów kontrolowanych.

Alternatywną metodą za pomocą obiektów CEvent jest dodanie zmiennej typu CEvent jako członek danych do klasę, którą chcesz kontrolować. Podczas budowy kontrolowanych obiektu, wywołanie konstruktora członek danych CEvent , określając, jeśli zdarzenie początkowo jest sygnalizowane, typ zdarzenia obiekt zostanie ma nazwę zdarzenia (jeśli będzie używany przez granice procesu) oraz potrzeby atrybutów zabezpieczeń.

Aby uzyskać dostęp do zasobów kontrolowanych przez obiekt CEvent w ten sposób, najpierw utworzyć zmienną albo typu CSingleLock lub CMultiLock w funkcji składowej dostępu użytkownika zasobu. Następnie wywołania obiektu kłódki Zablokuj Państwa funkcji (na przykład CMultiLock::Lock). W tym momencie Twój wątek będzie albo uzyskać dostęp do zasobu, czekać na zasób zwalniane i uzyskać dostęp lub opcje czekania na zasób powinien zostać wydany i limit czasu, nieudana próba uzyskania dostępu do zasobu. W każdym przypadku w sposób bezpieczny wątku obejrzano zasób. Aby zwolnić zasób, wywołanie funkcji SetEvent: do sygnału obiektu zdarzenia, a następnie użyj funkcji składowej Unlock obiektu blokady (na przykład CMultiLock::Unlock) lub Zezwalaj na obiekcie blokady mieszczą się poza zakresem.

Aby uzyskać więcej informacji na temat używania CEvent obiektów, zobacz artykuł Multithreading: używania klas synchronizacji w Visual C++ Programmer's Guide.

# include lt;afxmt.h>

Członkowie klasy |nbsp; Klasa podstawowa | Wykres hierarchii

Próbki  Próbki MFC MTGDI

Index