知識點概述:
Windows不是實時操作系統,而是搶佔式多線程操作系統
創建線程的內核對象之後,線程的暫停計數爲1,此時不能被CPU調度,因爲線程要初始化
初始化完成之後,會檢查是否有掛起標誌,有的話線程就暫停狀態,沒有則遞減暫停計數爲0,此時如果線程沒有等待其他事情,就處於可調度的狀態
除了CREATE_SUSPENDED標誌外,還可以使用SuspendThread 暫停線程,並且可以暫停多次,最多暫停127次,MAXIMUM_SUSPEND_COUNT標誌。遞增暫停計數。此時如果想要恢復線程可調用狀態,多次調用ResumThread遞減暫停計數爲0即可
進程不存在暫停或恢復,因爲不會分配CPU時間
可以通過遍歷進程的線程組來開關所有線程,但是存在隱患:因爲此時仍然可以可以創建或撤銷線程,所以之後的掛機或恢復操作就會有問題。比如獲取到所有線程後還沒有掛起時,此時創建了新的線程,此時將遺漏新建的線程,同理,獲取後撤銷了一個線程,會恢復不存在的線程等
由於線程可能被中斷,所以計算運行時間時GetTickCount()就不準確
GetThreadTimes:線程執行操作系統代碼和應用程序代碼的CPU時間(100ms單位)
GetProcessTimes:所有線程執行內核代碼和用戶代碼的時間總和(100ms單位)
高精度運行時間計算函數
QueryPerformanceFrequency
QueryPerformanceCounter
SetPriorityClass:改變進程的優先級類
SetThreadPriority:設置線程的相對優先級
激活或停用進程或線程的優先級提高功能
SetProcessPriorityBoost
SetThreadPriorityBoost
SetProcessAffinityMask:限制CPU子集上運行的單個進程中的線程數量
SetThreadAffinityMask:設置線程的親緣性(線程能在哪個CPU上運行)
SetThreadIdealProcessor:爲線程設置理想的CPU