本節內容關於win32中線程優先權。
這是程序的屬性之一,表現出它和別的程序相比的重要性。
優先權類別
基礎優先權值
realtime_priority_class
24high_priority_class
13normal_priority_class
7 or 8
idle_priority_class4
大部分程式使用normal_priority_class, 少數情況下才會考慮使用其他類別,比如task manager就是使用high_priority_class
你可以利用setpriorityclass()
和getpriorityclass()
來調整和驗證其值。
執行緒的優先權層級是對程序的優先權類別的乙個修改,使你能調整同乙個程序內的各執行緒的相對重要性。
一共有七種優先權層級。
優先權層級
調整值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
使用的函式有:
bool winapi setthreadpriority(
_in_ handle hthread,
_in_ int npriority
);
引數1:預調整的執行緒
引數2:上表顯示的數值
返回值:成功返回true,失敗返回getlasterror()
int winapi getthreadpriority(
_in_ handle hthread
);
引數1:代表乙個執行緒
返回值:函式成功返回true,失敗返回thread_priority_error_return
決定線**正優先權的最後乙個因素是動態提公升值。
所謂動態提公升,就是對優先權的一種調整,是系統能夠機動對待執行緒,以強化程式的可用性。
1. windows nt中可以在效能選項卡中設定選定對前台程式的回應。
2. 適用於同屬乙個程序的執行緒,例如只要執行緒獲得鍵盤輸入,該執行緒就得到乙個+5的優先權調整值。
3. 當乙個等待狀態獲得滿足時,例如乙個執行緒正在等待乙個mutex,當wait..() 返回時,該執行緒的優先權會獲得動態提公升。
如何在乙個執行緒開始執行之前對它進行初始化,解決之道是createthread()第五個引數,回憶一下createthread().
handle winapi createthread(
_in_opt_ lpsecurity_attributes lpthreadattributes,
_in_ size_t dwstacksize,
_in_ lpthread_start_routine lpstartaddress,
_in_opt_ lpvoid lpparameter,
_in_ dword dwcreationflags,
_out_opt_ lpdword lpthreadid
);
這個引數的含義如下:
通過設定為create_suspended
,產生乙個執行緒,傳回其handle,但是不會馬上執行。
一旦執行緒設定妥當,就可以呼叫resumethread()開始執行。
dword winapi resumethread(
_in_ handle hthread
);
如果函式成功,就會返回前一次掛起的次數,失敗將返回0xffffffff;
同時我們也可以讓呼叫端指定乙個執行緒睡眠,直到又有人呼叫了resumethread(),執行緒才會醒來。
睡眠中的執行緒不可能喚醒自己。
dword winapi suspendthread(
_in_ handle hthread
);
使用這個函式要注意不要掛起正在critical section內的執行緒。
suspendthread()最大的用途就是用來協助撰寫偵錯程式,偵錯程式允許在程式設計師的控制之下,啟動或停止任何乙個執行緒。
WIN32開發之小知識點
1 toupper 函式 toupper是乙個庫函式 toupper的標頭檔案 include 函式的原型 int toupper int c 函式說明 若引數 c 為小寫字母則將該對應的大寫字母返回。返回值 返回轉換後的大寫字母,若不須轉換則將引數c 值返回。toupper的標頭檔案 includ...
WIN32多執行緒
win32多執行緒學習 1.執行緒建立 handle createthread lpsecurity attributes lpthreadattributes,dword dwstacksize,lpthread start routine lpstartaddress,lpvoid lppara...
Win32建立多執行緒
win32建立多執行緒,貼下 define win32 lean and mean include include include include include include include include include define max threads 3 dword winapi pr...