MFC 線程創建方式


MFC 分UI線程和工作線程,一般現在的應用程序都是一個主UI線程和N個工作線程來完成工作。主UI線程獲取到工作線程發送的信息來刷新界面。

不過因為工作需要,MFC有要維護的項目,因此就學習一下MFC創建UI線程,使用工作線程的方式。

 

1、UI線程,繼承CWinThread類

 1 class CAddDeviceApp : public CWinThread  2 {  3  DECLARE_DYNCREATE(CAddDeviceApp)  4 protected:  5  CAddDeviceApp();  6 public:  7     virtual BOOL InitInstance();  8     virtual int ExitInstance();  9 protected: 10     virtual ~CAddDeviceApp(); 11  DECLARE_MESSAGE_MAP() 12 
13 };


線程InitInstance

 1 BOOL CAddDeviceApp::InitInstance()  2 {  3  CSecondThreadDlg dlg;  4     m_pMainWnd = &dlg;  5     INT_PTR nResponse = dlg.DoModal();  6     if (nResponse == IDOK)  7  {  8  }  9     else if (nResponse == IDCANCEL) 10  { 11  } 12     return TRUE; 13 }
m_pMainWnd = &dlg; 加上這個之后,UI線程會獨立處理消息循環,啟動的UI線程DoModal對話框不會阻塞主線程的對話框。

啟動UI線程:
1 CAddDeviceApp * pThread =  (CAddDeviceApp*)AfxBeginThread(RUNTIME_CLASS(CAddDeviceApp));
 
        
2、工作線程
目前工作在MFC中使用的工作線程有:MFC線程,C Run運行時線程,Boost線程。

1 boost::thread thrd(BoostThreadFunc); 2     
3 _beginthread(CRunThreadFunc,0,NULL); //不用 4 _beginthreadex(NULL, 0, ThreadFunEx, NULL, 0, NULL);             
5 pThread=AfxBeginThread(ThreadFunc,NULL,THREAD_PRIORITY_NORMAL); 

 
        

BOOST線程創建的方式種類比較多,可以通過函數對象,Boost::bind成員函數等多種方式創建,由於工作沒太多時間,就不總結了。                   

一般MFC使用AfxBeginThread比較安全。

 

by  karllen

2016-08-26 中午 於 杭州 濱江



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM