mfc多執行緒程式設計總結
mfc中,在多個執行緒之間通話、資料共享與同步的方法有:
1.全域性變數。
全域性變數需要用volatile宣告以防止使用暫存器導致出錯。
也可以使用interlockedincrement在阻塞其它執行緒的條件下修改單個全域性變數。
這是一種簡單的在同一程序中線程之間通話與資料共享的方法。
2.視窗訊息
對於在輔助線程與主線程通話,可以採取視窗訊息的方法,即在輔助線程中向主線程視窗傳送視窗訊息。
3.臨界區
所謂臨界區,是指那些要求以獨佔方式來訪問共享資料的**區域。mfc提供了ccriticalsection類,它封裝了windows臨界區控制代碼。使用方法如下:
ccriticalsection
g_cs;
intg_ncount1,g_ncount2;
int
g_result;
void
thread_a()
void
thread_b()
這樣,如果在執行執行緒a中thread_a()函式的過程中切換到了執行緒b的thread_b()函式,則在執行thead_b()函式中的g_cs.lock()時將被阻塞,直到thread_a()呼叫g_cs.unlock為止。
臨界區對於控制訪問資料很合適,它仍然只適用於單個程序內線程之間的同步控制。
4.互斥體、訊號(事件)
互斥體和訊號(事件)可以通過名字來在多個程序之間共享。
在mfc中,互斥體對應的類為
cmutex,事件對應的類為
cevent。
這裡說說cevent,可以通過cevent::setevent來設定事件,使用waitforsingleobject等待事件(該函式將執行緒掛起,直到特定的事件物件變成有訊號狀態)。
MFC多執行緒程式設計總結
在mfc程式中使用afxbeginthread函式來建立乙個執行緒,該函式因引數不同而具有兩種過載函式,分別對應工作者執行緒和使用者介面 ui 執行緒。一 工作執行緒 1 建立執行緒mfc api函式 cwinthread afxbeginthread afx threadproc pfnthrea...
MFC多執行緒程式設計
具體來說是 在mfc中呼叫attach的時候 有個巨集叫assert valid 這個方法不允許訪問非本執行緒建立的繼承於。在cwnd函式裡面有乙個valid 的靜態方法,檢測當前執行緒的mfc物件指標,是否在當前執行緒的map中 下面就是這個模組中線程狀態結構體 afx module thread...
MFC 多執行緒程式設計
mfc中有兩類執行緒 分別稱之為工作者執行緒和使用者介面執行緒 二者的主要區別在於工作者執行緒沒有訊息迴圈 而使用者介面執行緒有自己的訊息佇列和訊息迴圈 但對於 win32 的 api 程式設計而言 這兩種執行緒是沒有區別的 它們都只需執行緒的啟動位址即可啟動執行緒來執行任務 在mfc中 一般用全域...