最近客戶反映數據同步程序打開運行一段時間后,系統會很卡,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 值