C++/MFC-執行緒優先順序
一、執行緒優先順序(Thread priority )
簡單的說就是(執行緒)的優先順序越高,那麼就可以分佔相對多的CPU時間片。
每個程序都有相應的優先順序,優先順序決定它何時執行和佔用 CPU 時間。
最終的優先順序共分32級,是從 0 到 31 的數值,稱為基本優先級別。
程序優先順序priority class |
標誌 |
優先順序值 |
idle (低) |
IDLE_PRIORITY_CLASS |
4 |
Below 低於標準 |
BELOW_NORMAL_PRIORITY_CLASS |
此值在2000以下系統不支援 |
normal (標準) |
NORMAL_PRIORITY_CLASS |
9(前臺) 或 7(後臺) |
Above 高於標準 |
ABOVE_NORMAL_PRIORITY_CLASS |
此值在2000以下系統不支援 |
high (高) |
HIGH_PRIORITY_CLASS |
13 |
realtime (實時) |
REALTIME_PRIORITY_CLASS |
24 |
一個執行緒建立的時候,會繼承程序的優先順序等級。另外執行緒優先順序可以用SetThreadPriority來進行微調:
微調範圍
執行緒優先順序等級 |
標誌 |
優先順序值 |
|
1 |
idle (最低) |
THREAD_PRIORITY_IDLE |
如果程序優先順序為realtime則調整為16,其它情況為1 |
2 |
LOWEST 低 |
THREAD_PRIORITY_LOWEST |
-2(在原有基礎上-2) |
3 |
BELOW 低於標準 |
THREAD_PRIORITY_BELOW_NORMAL |
-1(在原有基礎上-1) |
4 |
NORMAL(標準) |
THREAD_PRIORITY_NORMAL |
不變(取程序優先順序值) |
5 |
ABOVE 高於標準 |
THREAD_PRIORITY_ABOVE_NORMAL |
+1(在原有基礎上+1) |
6 |
HIGHEST (高) |
THREAD_PRIORITY_HIGHEST |
+2(在原有基礎上+2) |
7 |
CRITICAL(最高) |
THREAD_PRIORITY_TIME_CRITICAL |
如果程序優先順序為realtime則調整為31,其它情況為15 |
注意:程序有6個等級,執行緒有7個等級
二、獲取當前執行緒控制代碼
HANDLE GetCurrentThread(VOID)
//返回當前進控制代碼
DWORD GetCurrentThreadId(VOID)
//返回當前程序ID值
三、執行緒優先順序的設定
BOOL SetThreadPriority //設定一個執行緒的優先級別
(
HANDLE hThread,// 執行緒控制代碼 handle to thethread
int nPriority // 要設定執行緒優先級別thread priority level
);
int GetThreadPriority 返回一個執行緒的優先級別
SetThreadPriorityBoost 設定執行緒是否禁用動態調整優先順序功能。
GetThreadPriorityBoost 獲取執行緒是否禁用了優先順序微調功能。
四、示例程式碼
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_IDLE); //設定為 最低