MFC多執行緒程式設計總結

2021-04-17 11:39:13 字數 932 閱讀 3166

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中 一般用全域...