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比較安全。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章