cevent類
cevent類提供了對事件的支援。事件是乙個允許乙個執行緒在某種情況發生時,喚醒另外乙個執行緒的同步物件。事件告訴執行緒何時去執行某乙個給定的任務,從而使多個執行緒流平滑。
例如在某些網路應用程式中,乙個執行緒(記為a)負責監聽通訊埠,另乙個執行緒(記為b)負責更新使用者資料。通過使用cevent類,執行緒a可以通知執行緒b何時更新使用者資料,這樣執行緒b可以盡快地更新使用者資料。
每乙個cevent類物件可以有兩種狀態:有訊號狀態和無訊號狀態。
mfc中,cevent類物件有兩種型別:人工事件和自動事件。
自動事件:乙個自動的cevent物件在被至少乙個執行緒釋放後會自動返回到無訊號狀態。
人工事件:人工的cevent物件獲得訊號後,釋放可利用執行緒,但直到呼叫成員函式resetevent()才將其設定為無訊號狀態。
cevent類的建構函式:
cevent(bool binitiallyown = false,
//事件物件初始化狀態 ture有訊號,false無訊號
bool bmaualreset = false,
//指定建立的是人工事件還是自動事件,true為人工事件,false為自動事件
lpctstr lpszname = null,
//後兩個引數是cevent物件的名稱和安全屬性,通常設 為 null。
lpsecurity_attributes lpsaattribute = null);
改變cevent物件狀態的函式
bool setevent()函式
該函式將cevent類物件的狀態設定為有訊號狀態,並且釋放所有等待的執行緒;
如果該事件是人工事件,則cevent類物件保持為有訊號狀態,直到呼叫成員函式resetevent()將其重新設為無訊號狀態時為止,這樣該事件就可以釋放多個執行緒;
如果該事件是自動事件,則在setevent()將事件設定為有訊號狀態後,cevent累物件有系統自動重置為無訊號狀態,除非乙個執行緒被釋放。
bool resetevent()函式
該函式將事件狀態設定為無訊號狀態,並保持該狀態直至setevent()被呼叫時為止。由於自動事件是由系統自動重置,故自動事件不需要呼叫該函式。
如下程式計算1 到 1000000的素數的個數並列印出個數。
cevent event; //定義個事件物件
void cthreadeventdlg::onprime()
uint calculateprime(lpvoid pparam)
} if (i >= k + 1)
}event.setevent(); //將事件物件啟用
return 0;
}
MFC 執行緒同步 CSemaphore類使用
csemaphore類 當需要乙個計數器來限制可以使用某個資源的執行緒數目時,即csemaphore類物件。csemaphore類的乙個物件儲存了對當前訪問某一指定資源的執行緒的計算值,該計數值是當前還可以使用該資源的執行緒的數目。如果這個計數達到了零,則所有對這個csemaphore類物件所控制的...
MFC 執行緒同步
使用waitforsingleobject函式來等待乙個核心物件變為已通知狀態 dword waitforsingleobject handle hobject,指明乙個核心物件的控制代碼 dword dwmilliseconds 等待時間 該函式需要傳遞乙個核心物件控制代碼,該控制代碼標識乙個核心...
C event執行緒安全
突然想到有關c 中使用event特性時關於執行緒安全的問題,以前雖然有遵從 複製引用 null判斷 的模式 盲目地 但沒有深入了解和思考。為之查詢了資料和實驗,對此有了進一步的理解。定義 field like event public event eventhandler done 類內raise ...