vc++多線程編程

vc++多線程編程

ID:27443960

大小:208.00 KB

頁數(shù):36頁

時間:2018-12-03

vc++多線程編程_第1頁
vc++多線程編程_第2頁
vc++多線程編程_第3頁
vc++多線程編程_第4頁
vc++多線程編程_第5頁
資源描述:

《vc++多線程編程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、VC++多線程編程VC中多線程使用比較廣泛而且實用,在網(wǎng)上看到的教程.感覺寫的挺好.一、問題的提出編寫一個耗時的單線程程序:新建一個基于對話框的應(yīng)用程序SingleThread,在主對話框IDD_SINGLETHREAD_DIALOG添加一個按鈕,ID為IDC_SLEEP_SIX_SECOND,標(biāo)題為“延時6秒”,添加按鈕的響應(yīng)函數(shù),代碼如下:voidCSingleThreadDlg::OnSleepSixSecond(){Sleep(6000);//延時6秒}編譯并運行應(yīng)用程序,單擊“延時6秒”按鈕,你就會發(fā)現(xiàn)在這6秒期間程序就象“死機”一樣,

2、不在響應(yīng)其它消息。為了更好地處理這種耗時的操作,我們有必要學(xué)習(xí)——多線程編程。二、多線程概述進程和線程都是操作系統(tǒng)的概念。進程是應(yīng)用程序的執(zhí)行實例,每個進程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,進程在運行過程中創(chuàng)建的資源隨著進程的終止而被銷毀,所使用的系統(tǒng)資源在進程終止時被釋放或關(guān)閉。線程是進程內(nèi)部的一個執(zhí)行單元。系統(tǒng)創(chuàng)建好進程后,實際上就啟動執(zhí)行了該進程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main或WinMain函數(shù),將程序的啟動點提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進程也就隨之終止。每一個進程至少有一個主

3、執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其它線程,多個線程并發(fā)地運行于同一個進程中。一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術(shù)的應(yīng)用也較為廣泛。多線程可以實現(xiàn)并行處理,避免了某項任務(wù)長時間占用CPU時間。要說明的一點是,目前大多數(shù)的計算機都是單處理器(CPU)的,為了運行所有這些線程,操作系統(tǒng)為每個獨立線程安排一些CPU時間,操作系統(tǒng)以輪換方式向線程提供時間片,這就給人一種假象,好象這些線程都在同時運行。由此可見,如果

4、兩個非?;钴S的線程為了搶奪對CPU的控制權(quán),在線程切換時會消耗很多的CPU資源,反而會降低系統(tǒng)的性能。這一點在多線程編程時應(yīng)該注意。Win32SDK函數(shù)支持進行多線程的程序設(shè)計,并提供了操作系統(tǒng)原理中的各種同步、互斥和臨界區(qū)等操作。VisualC++6.0中,使用MFC類庫也實現(xiàn)了多線程的程序設(shè)計,使得多線程編程更加方便。三、Win32API對多線程編程的支持Win32提供了一系列的API函數(shù)來完成線程的創(chuàng)建、掛起、恢復(fù)、終結(jié)以及通信等工作。下面將選取其中的一些重要函數(shù)進行說明。1、HANDLECreateThread(LPSECURITY_AT

5、TRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);該函數(shù)在其調(diào)用進程的進程空間里創(chuàng)建一個新的線程,并返回已建線程的句柄,其中各參數(shù)說明如下:lpThreadAttributes:指向一個SECURITY_ATTRIBUTES結(jié)構(gòu)的指針,該結(jié)構(gòu)決定了線程的安全屬性,一般置為NULL;dwStackSize:指定了線程的堆棧深

6、度,一般都設(shè)置為0;lpStartAddress:表示新線程開始執(zhí)行時代碼所在函數(shù)的地址,即線程的起始地址。一般情況為(LPTHREAD_START_ROUTINE)ThreadFunc,ThreadFunc是線程函數(shù)名;lpParameter:指定了線程執(zhí)行時傳送給線程的32位參數(shù),即線程函數(shù)的參數(shù);dwCreationFlags:控制線程創(chuàng)建的附加標(biāo)志,可以取兩種值。如果該參數(shù)為0,線程在被創(chuàng)建后就會立即開始執(zhí)行;如果該參數(shù)為CREATE_SUSPENDED,則系統(tǒng)產(chǎn)生線程后,該線程處于掛起狀態(tài),并不馬上執(zhí)行,直至函數(shù)ResumeThread

7、被調(diào)用;lpThreadId:該參數(shù)返回所創(chuàng)建線程的ID;如果創(chuàng)建成功則返回線程的句柄,否則返回NULL。2、DWORDSuspendThread(HANDLEhThread);該函數(shù)用于掛起指定的線程,如果函數(shù)執(zhí)行成功,則線程的執(zhí)行被終止。3、DWORDResumeThread(HANDLEhThread);該函數(shù)用于結(jié)束線程的掛起狀態(tài),執(zhí)行線程。4、VOIDExitThread(DWORDdwExitCode);該函數(shù)用于線程終結(jié)自身的執(zhí)行,主要在線程的執(zhí)行函數(shù)中被調(diào)用。其中參數(shù)dwExitCode用來設(shè)置線程的退出碼。5、BOOLTermi

8、nateThread(HANDLEhThread,DWORDdwExitCode);一般情況下,線程運行結(jié)束之后,線程函數(shù)正常返回,但是

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。