舉例
例如,拷貝數據到數據文檔時,執行緒應被通知何時數據是可用的。當新數據可用時,通過運用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 | 釋放事件對象 |