題目有點大,其實主要講述執行緒執行及退出時遇到的一些問題和解決辦法以及注意事項。乙個工業控制專案,用usb口採集資料,程式結構是主程序負責介面和演算法,建立乙個子執行緒負責usb通訊,讀取資料,死迴圈。
參考mfc的執行緒演練編制,以下根據**逐行說明:
1. 啟動執行緒
用afxbeginthread( camerathrdpro, (lpvoid)this, thread_priority_time_critical )啟動執行緒,這個方法的引數較多,這裡只用前三個引數,第乙個camerathrdpro是執行緒處理函式,必須是乙個靜態或全域性函式;第二個(lpvoid)this,把當前物件例項指標傳到靜態或全域性函式中,通過它可以呼叫本例項的成員方法和資料;第三個thread_priority_time_critical把執行緒級別設到最高,以便實時採集和控制,避免卡頓現象。
2. 建立全域性物件,控制線程結束
m_heventkilled = createevent(null, false, false, null); // auto reset, initially reset
3. 靜態執行緒處理函式
uint dynamicscan::camerathrdpro(lpvoid pparam) // 執行緒處理函式,lpvoid pparam 指向本類
這個函式是乙個過度函式,通過pparam轉到類例項內部處理。
3. 實際執行緒處理
uint dynamicscan::camerathrd()
end_catch_all
...... // 執行緒迴圈結束
setevent( m_heventkilled ); // 置結束標識
return result;
}4. 結束通訊線程
void dynamicscan::killthread()
參考資料:
mtrecalc 示例:支援多執行緒應用程式
vs環境中下拉列表,幫助-》示例-》本地 samples 資料夾。 mfc 高階示例 :mtrecalc 示例:支援多執行緒應用程式。
c:\program files (x86)\microsoft visual studio 10.0\samples\2052\vc2010sp1samples.zip\c++\mfc\advanced\mtrecalc
MFC 執行緒同步
使用waitforsingleobject函式來等待乙個核心物件變為已通知狀態 dword waitforsingleobject handle hobject,指明乙個核心物件的控制代碼 dword dwmilliseconds 等待時間 該函式需要傳遞乙個核心物件控制代碼,該控制代碼標識乙個核心...
多執行緒那些事
其實在所有的軟體開發人員心裡應該有乙個開發準則,那就是錙銖必較。就是對於效能和速度的要求是我們不斷努力的方向。多執行緒就是為了實現我們對計算機硬體的最大化利用和並行處理而提出來的解決方案。當然對效能的要求就帶來了複雜的演算法處理方案。但是其他方面的效能優化也為我們的多執行緒程式設計引入了新的麻煩。首...
MFC多執行緒 執行緒同步
執行緒間的同步 常用的同步物件 1 臨界區 critical section 2 互斥 mutex 3 訊號量 semaphore 4 事件 event mfc提供了幾種同步類和同步輔助類,包含在afxmt.h中 1 同步物件基類 csyncobject 抽象類,為win32中的同步物件提供通用效能...