設置進程和線程的優先級


   最近客戶反映數據同步程序打開運行一段時間后,系統會很卡,CPU在60%-70%。程序是用線程無限循環去更新數據,當然也設置了間隔時間。沒判斷一次間隔時間,都使用了Sleep(100)去停頓一下。所以我改了Sleep(2000)加大停頓時間。我還設置了程序的優先級,找了下資料,順便記錄下。

   進程(線程)的優先級越高,那么就可以分占越多的CPU時間片,每個進程都有相應的優先級,優先級決定它何時運行和占用CPU的時間。最終的優先級共分 32 級,是從 0 到 31 的數值,稱為基本優先級別。


 

   SetPriorityClass(設置進程優先級)

    function SetPriorityClass(hProcess: THandle; dwPriorityClass: DWORD): BOOL;

進程優先級別
優先級 標志 優先級值
idle   (低) IDLE_PRIORITY_CLASS 4
Below (低於標准) BELOW_NORMAL_PRIORITY_CLASS  
normal (標准) NORMAL_PRIORITY_CLASS 7或9
Above (高於標准) ABOVE_NORMAL_PRIORITY_CLASS  
high (高) HIGH_PRIORITY_CLASS 13
realtime (實時) REALTIME_PRIORITY_CLASS

24

 

SetThreadPriority    --設置線程優先級

function SetThreadPriority(hThread: THandle; nPriority: Integer): BOOL;

線程優先級別
線程優先級等級 標志 優先級值
idle (最低) THREAD_PRIORITY_IDLE 如果進程優先級為realtime則調整為16,其它情況為1
LOWEST 低 THREAD_PRIORITY_LOWEST -2(在原有基礎上-2)
BELOW 低於標准 THREAD_PRIORITY_BELOW_NORMAL -1(在原有基礎上-1)
NORMAL(標准) THREAD_PRIORITY_NORMAL 不變(取進程優先級值)
ABOVE 高於標准 THREAD_PRIORITY_ABOVE_NORMAL +1(在原有基礎上+1)
HIGHEST(高) THREAD_PRIORITY_HIGHEST +2(在原有基礎上+2)
CRITICAL(最高) THREAD_PRIORITY_TIME_CRITICAL 如果進程優先級為realtime則調整為31,其它情況為15

 

獲取當前線程   GetCurrentThread  //返回當前線程句柄

                    GetCurrentThreadId //返回當前進程 ID 值

 

 

 

 

               


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM