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