一. 使用執行緒步驟:
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...