MFC 線程建立方式

MFC 分UI線程和工做線程,通常如今的應用程序都是一個主UI線程和N個工做線程來完成工做。主UI線程獲取到工做線程發送的信息來刷新界面。安全

不過由於工做須要,MFC有要維護的項目,所以就學習一下MFC建立UI線程,使用工做線程的方式。函數

 

一、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 };


線程InitInstancespa

 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));
 
二、工做線程
目前工做在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比較安全。code

 

by  karllen對象

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

相關文章
相關標籤/搜索