进程优先级和线程优先级正在构建base priority
线程。请参阅调度优先级以了解如何组合优先级。通过查看此列表,您可以清楚地看出您的理解是正确的;在某个优先级内,base priority
可以有不同的值,由thread priority
.
并非所有 Windows 版本都支持value PROCESS_MODE_BACKGROUND_BEGIN
for和value for 。SetPriorityClass
THREAD_MODE_BACKGROUND_END
SetThreadPriority
PROCESS_MODE_BACKGROUND_BEGIN:
系统降低进程(及其线程)的资源调度优先级,使其可以在不显着影响前台活动的情况下执行后台工作。
THREAD_MODE_BACKGROUND_END:
结束后台处理模式。系统将线程的资源调度优先级恢复为线程进入后台处理模式之前的状态。
这里所讨论的场景的后果是可以预测的:SetPriorityClass
将把进程及其所有线程设置为background processing mode
. 以下SetThreadPriority
只会从 中释放 a 线程background processing mode
。但是该进程的所有其他可能线程将保持在后台处理模式。
注意:只有 和 的process priority class
组合 thread priority
决定base priority
. 因此,无论是调用GetThreadPriority
还是调用都GetPriorityClass
不会返回基本优先级。只有它们的组合才会释放上面“调度优先级”链接中描述的基本优先级。不幸的是,新background processing mode
值尚未包含在base priority
列表中。但是名称base priority
说明了这里的重要性:基于基本优先级(从进程优先级和线程优先级派生),调度程序可以动态调整调度优先级。后台模式只是fine tune
调度优先级的另一种方式。另一种方法是优先级提升。优先级提升功能存在了一段时间。新的访问权限background processing mode
值SetThreadPriority
并SetPriorityClass
直接打开优先级提升能力。在 Windows XP 中,这必须通过调用SetProcessPriorityBoost来完成。