MFC 分UI線程和工作線程,一般現(xiàn)在的應(yīng)用程序都是一個主UI線程和N個工作線程來完成工作。主UI線程獲取到工作線程發(fā)送的信息來刷新界面。
成都創(chuàng)新互聯(lián)服務(wù)項目包括怒江州網(wǎng)站建設(shè)、怒江州網(wǎng)站制作、怒江州網(wǎng)頁制作以及怒江州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,怒江州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到怒江州省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
不過因為工作需要,MFC有要維護的項目,因此就學(xué)習(xí)一下MFC創(chuàng)建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線程會獨立處理消息循環(huán),啟動的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線程創(chuàng)建的方式種類比較多,可以通過函數(shù)對象,Boost::bind成員函數(shù)等多種方式創(chuàng)建,由于工作沒太多時間,就不總結(jié)了。
一般MFC使用AfxBeginThread比較安全。