Windows編程-多任務編程

Windows編程-多任務編程

ID:43382071

大小:296.50 KB

頁數(shù):34頁

時間:2019-10-08

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

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

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

2、WinMainCRTStartup¨intWINAPIwWinMain()

3、wWindMainCRTStartup¨int__cdeclmain()

4、mainCRTStartup¨int__cdeclwMain()

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

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

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

8、操作系統(tǒng),因為一個線程可以隨時停止運行,然后另外一個線程進行調(diào)度。基于任務優(yōu)先級的搶占式調(diào)度算法,同一優(yōu)先級的任務遵循時間片輪轉(zhuǎn),并且遵循FIFO策略。每隔20ms左右,windows要查看當前所有的線程內(nèi)核對象,在這些內(nèi)核對象中,只有某些對象被視為可以調(diào)度的對象,Windows選擇可調(diào)度線程內(nèi)核對象中的一個,將他加載到CPU寄存器中,然后繼續(xù)運行,當系統(tǒng)引導時,便可以加載CPU寄存器中的線程上下文,使線程運行。系統(tǒng)只調(diào)度可以調(diào)度的線程。實際情況是很多線程是不可調(diào)度的線程,比如一個暫停運行的線程(可以在創(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)引導的時候創(chuàng)建特殊的線程——0頁線程,其優(yōu)先級為0,當系統(tǒng)中沒有任何其他線程運行時,0頁線程負責將系統(tǒng)中所有的空閑RAM頁面置0進程內(nèi)使用線程相對的優(yōu)先級:空閑、最低、低于正常、正常、高于正常、最高、關鍵時間進程也根據(jù)具體情況被分為5個進程優(yōu)先級類:空閑、低于正常、正常

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

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

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

當前文檔最多預覽五頁,下載文檔查看全文

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

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