CEvent

CEvent

CEvent類的一個對象,表示一個“事件”——一個允許一個事件發生時線程通知另一個線程的同步對象。在一個線程需要了解何時執行任務時,事件是十分有用的。

舉例


例如,拷貝數據到數據文檔時,線程應被通知何時數據是可用的。當新數據可用時,通過運用CEvent對象來通知拷貝線程,線程才可能儘快地執行。

對象


類型
CEvent對象有兩種類型:自動和 手工。
一個手工CEvent對象存在於由ResetEvent 或SetEvent設置的狀態中,直到另一個函數被調用。一個自動CEvent對象在至少一個線程被釋放后自動返回一個無標記(無用的)狀態。
對象的使用
要使用一個CEvent對象,應在需要時構造一個CEvent對象。指定要等待的事件,應用應擁有它,就可以在構造函數返回時訪問事件。調用SetEvent標記(使可用)事件對象,然後當訪問完控制資源時,調用Unlock函數。
另一個使用CEvent對象的方法是添加一個CEvent類型的變數,使之成為希望控制的類的一個數據成員。在控制對象被構造期間,可調用CEvent數據成員的構造函數,它指明時間是否是最初就被標記、需要的事件對象類型、事件名稱(如果在進程中要使用)和所希望的安全屬性。
按以下方式訪問一個被CEvent對象控制的資源:首先創建在資源訪問成員函數中構造一個CSingleLock或CMultiLock類型的變數,然後調用封鎖對象的Lock成員函數(如CMultiLock::Lock)。此時,線程要麼可以訪問資源,等待資源釋放后訪問;要麼等待資源釋放而超時,訪問資源失敗。在各種情況下,資源都被以線程安全方式訪問。要釋放資源,可調用SetEvent來標識一個事件對象,然後使用封鎖對象的Unlock成員函數(如CMultiLock::UnLock)成員函數,或允許封鎖對象超過範圍。#include

成員


構造函數
CEvent構造一個CEvent對象

方法


SetEvent設置一個事件可用(有標記)並釋放某些等待線程
PulseEvent設置一個事件可用(有標記),並釋放某些等待線程,設置該事件無效(無標記)
ResetEvent設置事件無效(無標記)
Unlock釋放事件對象