1. 程式人生 > >C++/MFC-執行緒優先順序

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); //設定為 最低