幾個知識點:
1.使用SuspendThread和ResumeThread來暫停和恢複線程的運行。
2.通過Sleep函數,線程可以告訴系統,它不想在某個時間段內被調度。系統將在大約的指定毫秒數內使線程不可調度。如果給Sleep函數傳遞0,表示調用線程將釋放剩餘的時間片,並迫使系統調度另一個線程。
3.系統提供了一個稱為SwitchToThread的函數,使得另一個可調度線程(如果存在的話)能夠運行。
4.當要計算線程執行某個任務需要多長時間時,如果採用GetTickCount,則假設了當前線程不會被中斷。因此我們需要一個函數,以便返回當前線程得到的CPU時間的數量,GetThreadTimes函數可以做到。GetProcessTimes是針對進程的相對應的函數,適用於進程中的所有線程。
5.Windows還提供了一些高解析度效能函數:QueryPerformanceFrequency以及QueryPerformanceCounter。
6.Windows允許使用GetThreadContext和SetThreadContext來擷取和設定線程的上下文,不過在擷取和設定之前,應該先暫停線程。
7.當系統引導時,它會建立一個特殊的線程,稱為0頁麵線程。該線程被賦予優先順序0。它是整個系統中唯一的一個在優先順序0上啟動並執行線程。當系統中沒有任何線程需要執行操作時,0頁線程負責將系統中的所有空閑RAM頁面置0。
8.進程可以使用SetPriorityClass和GetPriorityClass來設定和查詢優先順序類。線程可以使用SetThreadPriority和GetThreadPriority來設定和查詢線程的優先順序。
9.系統可以為基本優先順序等級在動態優先順序範圍(1~15)內的線程動態提高線程的優先順序等級(如:當低優先順序的線程處於CPU饑渴狀態時,或者當一個進程是前台進程時),但是系統也絕不會將優先順序提高到即時範圍(高於15)。
10.可以使用SetProcessPriorityBoost和SetThreadPriorityBoost來使動態提高線程優先順序等級的功能不起作用。函數GetProcessProrityBoost和GetThreadPriorityBoost用於查詢。
11.使用SetProcessAffinityMask和GetProcessAffinityMask來設定和擷取進程的親緣性。使用SetThreadAffinityMask來為各個線程設定親緣性屏蔽。若要為線程設定一個理想的CPU,可以調用SetThreadIdleProcessor。