Windows編程-多任務(wù)編程

Windows編程-多任務(wù)編程

ID:43382071

大?。?96.50 KB

頁數(shù):34頁

時間:2019-10-08

Windows編程-多任務(wù)編程_第1頁
Windows編程-多任務(wù)編程_第2頁
Windows編程-多任務(wù)編程_第3頁
Windows編程-多任務(wù)編程_第4頁
Windows編程-多任務(wù)編程_第5頁
資源描述:

《Windows編程-多任務(wù)編程》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、線程的創(chuàng)建和運(yùn)行第三章線程的創(chuàng)建和運(yùn)行3.1基本概念3.2線程的創(chuàng)建3.3終止線程3.4線程的暫停與回復(fù)3.5在類中使用線程3.1基本概念Windows進(jìn)程進(jìn)程的四種入口函數(shù)intWINAPIWindMain()

2、WinMainCRTStartup¨intWINAPIwWinMain()

3、wWindMainCRTStartup¨int__cdeclmain()

4、mainCRTStartup¨int__cdeclwMain()

5、wmainCRTStartup操作系統(tǒng)不直接調(diào)用入口函數(shù),而是調(diào)用c/c++運(yùn)行庫的啟動函數(shù)操作系

6、統(tǒng)啟動進(jìn)程檢索指向新進(jìn)程的完整命令行的指針檢索指向新進(jìn)程的環(huán)境變量的指針對C/C++運(yùn)行期的全局變量初始化對C運(yùn)行期內(nèi)存單元分配函數(shù)(malloc和calloc)和其他的底層輸出輸入例程使用的內(nèi)存堆進(jìn)行初始化為所有全局和靜態(tài)的C++對象調(diào)用構(gòu)造函數(shù)線程的構(gòu)成線程的內(nèi)核對象,操作系統(tǒng)用它來對線程實(shí)施管理線程堆棧,用于維護(hù)線程在執(zhí)行代碼時候需要的所有函數(shù)局部變量。線程上下文(一組CPU寄存器狀態(tài),特別是指令指針寄存器和堆棧指針寄存器)指令寄存器和堆棧寄存器記錄的地址都用于標(biāo)志擁有線程的進(jìn)程地址空間中的內(nèi)存線程和進(jìn)程進(jìn)程比線程使

7、用更多的系統(tǒng)資源,原因是它需要更多的地址空間。為進(jìn)程創(chuàng)建一個虛擬地址空間,需要很多系統(tǒng)資源,同時,系統(tǒng)中要保留大量的記錄,這也要占用大量的內(nèi)存。另外,dll或者exe需要加載到一個地址空間,也需要文件資源。線程只需要一個內(nèi)核對象和一個堆棧,保留的記錄很少,因此需要很少的內(nèi)存?Windows中進(jìn)程是不活潑的,進(jìn)程從來不執(zhí)行任何東西,進(jìn)程只是線程的容器?應(yīng)該用增加線程來解決編程問題,避免創(chuàng)建新的進(jìn)程。Windows線程的調(diào)度搶占式操作系統(tǒng)必須使用某種算法來確定哪些線程應(yīng)該在何時調(diào)度和運(yùn)行多長時間Windows被稱為搶占式多線程

8、操作系統(tǒng),因?yàn)橐粋€線程可以隨時停止運(yùn)行,然后另外一個線程進(jìn)行調(diào)度?;谌蝿?wù)優(yōu)先級的搶占式調(diào)度算法,同一優(yōu)先級的任務(wù)遵循時間片輪轉(zhuǎn),并且遵循FIFO策略。每隔20ms左右,windows要查看當(dāng)前所有的線程內(nèi)核對象,在這些內(nèi)核對象中,只有某些對象被視為可以調(diào)度的對象,Windows選擇可調(diào)度線程內(nèi)核對象中的一個,將他加載到CPU寄存器中,然后繼續(xù)運(yùn)行,當(dāng)系統(tǒng)引導(dǎo)時,便可以加載CPU寄存器中的線程上下文,使線程運(yùn)行。系統(tǒng)只調(diào)度可以調(diào)度的線程。實(shí)際情況是很多線程是不可調(diào)度的線程,比如一個暫停運(yùn)行的線程(可以在創(chuàng)建線程的時候,直接

9、指定這個線程是暫停的。)比如一個正在等待某些事情發(fā)生的線程。CPU不給無事可作的線程分配CPU時間。Windows線程的優(yōu)先級每個線程都會被賦予一個從0-31的優(yōu)先級號碼只要是高優(yōu)先級的線程是可以調(diào)度的,系統(tǒng)絕對不會調(diào)度低優(yōu)先級的(Starvation)系統(tǒng)引導(dǎo)的時候創(chuàng)建特殊的線程——0頁線程,其優(yōu)先級為0,當(dāng)系統(tǒng)中沒有任何其他線程運(yùn)行時,0頁線程負(fù)責(zé)將系統(tǒng)中所有的空閑RAM頁面置0進(jìn)程內(nèi)使用線程相對的優(yōu)先級:空閑、最低、低于正常、正常、高于正常、最高、關(guān)鍵時間進(jìn)程也根據(jù)具體情況被分為5個進(jìn)程優(yōu)先級類:空閑、低于正常、正常

10、、高于正常、實(shí)時線程的實(shí)際優(yōu)先級是進(jìn)程優(yōu)先級類和進(jìn)程內(nèi)線程相對優(yōu)先級的組合正常優(yōu)先級類的進(jìn)程的基本優(yōu)先級是5,進(jìn)程內(nèi)正常優(yōu)先級線程的優(yōu)先級是8,所以一個正常進(jìn)程中的正常優(yōu)先級線程的真正優(yōu)先級是133.2線程的創(chuàng)建何時創(chuàng)建一個進(jìn)程的主線程線程用于描述進(jìn)程中的運(yùn)行路徑。每當(dāng)進(jìn)程被初始化,系統(tǒng)就要創(chuàng)建一個主線程。該線程和C/C++運(yùn)行庫的啟動代碼一道開始運(yùn)行,啟動代碼則調(diào)用進(jìn)入點(diǎn)函數(shù)。并且繼續(xù)運(yùn)行直到進(jìn)入點(diǎn)函數(shù)返回并且C/C++運(yùn)行庫的啟動代碼調(diào)用ExitProcess為止線程進(jìn)入點(diǎn)函數(shù)每個線程必須有一個進(jìn)入點(diǎn)函數(shù),線程從這個進(jìn)

11、入點(diǎn)開始運(yùn)行。一個進(jìn)程的主線程的進(jìn)入點(diǎn)函數(shù)main,wmain,WinMain,wWinMain一個輔助線程的進(jìn)入點(diǎn)函數(shù):例如DWORDWINAPIThreadFunc(LPVOIDpvParam){DWORDdwResult=0;…..returndwResult.}CreateThread函數(shù)在一個已經(jīng)運(yùn)行的線程中創(chuàng)建輔助線程HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,//安全性,缺省NULLSIZE_TdwStackSize,//initial

12、stacksize,0表示和調(diào)用線程一樣大小LPTHREAD_START_ROUTINElpStartAddress,//threadfunctionLPVOIDlpParameter,//threadargument,傳遞給線程的參數(shù),NULL則不傳參DWORDdwCreationFlags,//cr

當(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)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。