最近客户反映数据同步程序打开运行一段时间后,系统会很卡,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 值