Win32多執行緒 程序優先權與執行緒優先順序

2021-10-20 17:40:45 字數 1687 閱讀 6512

1. 優先權類別(priority class)

"優先權類別"是程序的屬性之一。這個屬性可以表現出這一程序和其他程序比較之下的重要性。 win32 提供四種優先權類別,每乙個類別對應乙個基本的優先權層級。下表展示了四個優先權類別。

優先權類別(priority classes)

基礎優先權值(base priority)

high_priority_class

13idle_priority_class

4normal_priority_class

7 or 8(有些資料上寫 7 or 9)

realtime_priority_class

24大部分程式使用 normal_priority_class,少數情況下才會考慮使用其他類別。task manager就是使用 high_priority_class。最後乙個類別是 realtime_priority_class。這個類別用以協助解決一些和時間有密切關係的工作。優先權類別適用於程序而非執行緒,可以利用 setpriorityclass() 和getpriorityclass()來調整和驗證其值。

2. 優先權層級(priority level)

執行緒的優先權層級(priority level)是對程序的優先權類別的乙個修改,使你能夠調整同乙個程序內的各執行緒的相對重要性。一共有七種優先權層級:

優先權層級(priority levels)

調整值

thread_priority_highest

+2thread_priority_above_normal

+1thread_priority_normal 

0thread_priority_below_normal

-1thread_priority_lowest

-2thread_priority_idle

set to 1

thread_priority_time_critical

set to 15

注意:對於 realtime_priority_class 的調整值,有點不同於上表所列

2.1 優先權層級設定

bool setthreadpriority(

handle hthread,

int npriority

);如果成功, 傳回上表所列的其中乙個值; 如果失敗, 傳回false, getlasterror()可以獲得更詳細的資訊.

2.2 優先權層級獲取

int getthreadpriority(

handle hthread

);如果函式成功, 傳回執行緒的優先順序. 如果失敗, 就傳回thread_priority_error_return. getlasterror()可以獲得更詳細的資訊.

2.3 動態提公升(dynamic boost)

決定線**正優先權的最後乙個因素是其目前的動態提公升值(dynamic boost). 所謂動態提公升是對優先權的一種調整, 使系統能夠機動對待執行緒,以強化程式的可用性。由作業系統決策。

小心翼翼地設定執行緒優先權是件多麼重要的事情。改變執行緒優先權可能會開啟潘朵拉的盒子,一些新的問題跑出來,死鎖的陰影也潛在性地醞釀著。雖然優先權的基礎知識很簡單,但其實用面卻可能很複雜。如果你的目標是保持簡單,那就還是避免處理"優先權"這個燙手山芋吧。

WIN32多執行緒

win32多執行緒學習 1.執行緒建立 handle createthread lpsecurity attributes lpthreadattributes,dword dwstacksize,lpthread start routine lpstartaddress,lpvoid lppara...

Win32多執行緒之執行緒優先順序

win32中優先權的概念,用來決定下乙個獲得cpu時間的執行緒是誰,較高優先權的執行緒必然獲得較多的cpu時間。關於優先權的完整討論其實相當複雜,你可以無分軒輊地給予每乙個執行緒相同的優先權,這可能會使你承擔不少麻煩,你也可以明智地使用優先權,使自己能夠調整程式的執行次序。例如你可以設定你的gui執...

Win32建立多執行緒

win32建立多執行緒,貼下 define win32 lean and mean include include include include include include include include include define max threads 3 dword winapi pr...