MFC中多執行緒的應用

2021-08-31 10:25:06 字數 919 閱讀 2882

一. 使用執行緒步驟:

1. 定義執行緒函式傳遞引數結構 如:

typedef struct tagthreadparms

threadparms;

2. 定義執行緒函式: 如:

uint read(lpvoid pparam)

3. 啟動執行緒 如:

threadparms *ptp=new threadparms;//初始化執行緒引數結構

ptp->hwnd=m_hwnd;//對ptp結構賦值

ptp->mm=mm;

ptp->window=window;

ptp->thread_id=thead_id;

ptp->state=state;

afxbeginthread(read,ptp);//啟動執行緒

二. 執行緒的掛起和重啟

1. 掛起執行緒

suspendthread(handle);

注意:執行緒暫停後便停止執行,也就是說執行緒可以自己掛起自己,但無法自己喚醒自己。

2.喚醒執行緒

resumethread(handle);

對於cwinthread 類,只要使用m_hthread成員,即為handle變數。

超級注意:getcurrentthread()得到的是乙個當前的執行緒的handle,其實是乙個偽handle,是當前所有執行的執行緒環境的handle。無法直接使用此函式得到的handle喚醒執行緒。但是使用一些其他函式後可以,我沒有嘗試。

還有,mfc中的執行緒是不安全的。不安全的含義是:當兩個執行緒同時訪問同乙個臨界資源時,系統會允許。這就會產生一些不可預知的錯誤。

解決的方法時使用程序的同步類或者自己編寫**實現執行緒互斥訪問和同步。

圍觀it

MFC中多執行緒的應用

做專案中涉及到多執行緒的操作,所以學習了一下mfc中多執行緒的用法!包括控制代碼的定義 初始化,執行緒函式的定義 初始化,鎖的使用。控制代碼的定義 cwinthread thread1 執行緒函式的定義 static uint thread1 func lpvoid lpparam 加static表...

MFC中多執行緒問題

mfc中多執行緒問題 問題是這樣的 我們程式設計涉及到乙個多執行緒問題,當把執行緒函式定義為全域性時正常,而定義為類的成員函式時就會出錯。說錯誤是afxbeginthread不能從unsinged int void 轉換為第乙個引數。我在google上搜尋了一下,找到了幾個解決方案。cpp 1.cl...

MFC中多執行緒總結

前言 對於寫mfc介面來說,如果某個訊息對映函式流程執行時間太長,有太多的sleep 和 while 1 會導致執行緒時間過長,mfc介面卡死,因此需要學會用多執行緒 思路 1.建立流程 2.建立執行緒呼叫的函式 3.結束執行緒 第一步 建立執行緒 cwinthread m pthread m pt...