資源描述:
《多線程編程實例》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、一般情況下,調(diào)用AfxBeginThread()來一次性地創(chuàng)建并啟動一個線程,但是也可以通過兩步法來創(chuàng)建線程:首先創(chuàng)建CWinThread類的一個對象,然后調(diào)用該對象的成員函數(shù)CreateThread()來啟動該線程?! irtualBOOLCWinThread::InitInstance(); 重載該函數(shù)以控制用戶界面線程實例的初始化。初始化成功則返回非0值,否則返回0。用戶界面線程經(jīng)常重載該函數(shù),工作者線程一般不使用InitInstance()?! irtualintCWinThread::ExitInstance(); 在線程終結(jié)前重載該函數(shù)
2、進行一些必要的清理工作。該函數(shù)返回線程的退出碼,0表示執(zhí)行成功,非0值用來標識各種錯誤。同InitInstance()成員函數(shù)一樣,該函數(shù)也只適用于用戶界面線程。(UI)步驟/方法1.MFC多線程編程實例 在VisualC++6.0編程環(huán)境中,我們既可以編寫C風(fēng)格的32位Win32應(yīng)用程序,也可以利用MFC類庫編寫C++風(fēng)格的應(yīng)用程序,二者各有其優(yōu)缺點。基于Win32的應(yīng)用程序執(zhí)行代碼小巧,運行效率高,但要求程序員編寫的代碼較多,且需要管理系統(tǒng)提供給程序的所有資源;而基于MFC類庫的應(yīng)用程序可以快速建立起應(yīng)用程序,類庫為程序員提供了大量的封裝類,而且De
3、veloperStudio為程序員提供了一些工具來管理用戶源程序,其缺點是類庫代碼很龐大。由于使用類庫所帶來的快速、簡捷和功能強大等優(yōu)越性,因此除非有特殊的需要,否則VisualC++推薦使用MFC類庫進行程序開發(fā)?! ∥覀冎溃琈FC中的線程分為兩種:用戶界面線程和工作者線程。我們將分別舉例說明?! ∮肕FC類庫編程實現(xiàn)工作者線程 例程5MultiThread5 為了與Win32API對照,我們使用MFC類庫編程實現(xiàn)例程3MultiThread3。 建立一個基于對話框的工程MultiThread5,在對話框IDD_MULTITHREAD5_DIAL
4、OG中加入一個編輯框IDC_MILLISECOND,一個按鈕IDC_START,標題為“開始”,一個進度條IDC_PROGRESS1; 打開ClassWizard,為編輯框IDC_MILLISECOND添加int型變量m_nMilliSecond,為進度條IDC_PROGRESS1添加CProgressCtrl型變量m_ctrlProgress; 在MultiThread5Dlg.h文件中添加一個結(jié)構(gòu)的定義:structthreadInfo { UINTnMilliSecond; CProgressCtrl*pctrlProgress; };2
5、. 線程函數(shù)的聲明:UINTThreadFunc(LPVOIDlpParam); 注意,二者應(yīng)在類CMultiThread5Dlg的外部?! ≡陬怌MultiThread5Dlg內(nèi)部添加protected型變量:CWinThread*pThread; 在MultiThread5Dlg.cpp文件中進行如下操作:定義公共變量:threadInfoInfo; 雙擊按鈕IDC_START,添加相應(yīng)消息處理函數(shù): voidCMultiThread5Dlg::OnStart() { //TODO:Addyourcontrolnotificationha
6、ndlercodehere UpdateData(TRUE); Info.nMilliSecond=m_nMilliSecond; Info.pctrlProgress=&m_ctrlProgress; pThread=AfxBeginThread(ThreadFunc, &Info); } 在函數(shù)BOOLCMultiThread3Dlg::OnInitDialog()中添加語句:{ …… //TODO:Addextrainitializationhere m_ctrlProgress.SetRange(0,99); m_nMilli
7、Second=10; UpdateData(FALSE); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol } 添加線程處理函數(shù):UINTThreadFunc(LPVOIDlpParam) { threadInfo*pInfo=(threadInfo*)lpParam; for(inti=0;i<100;i++) { intnTemp=pInfo->nMilliSecond; pInfo->pctrlProgress->SetPos(i); Sleep(nTemp); }
8、 return0; } 用MFC類庫編程實現(xiàn)用戶界面線程1.