Windows定义了6个优先级类别
来源:互联网 发布:mac 广告拦截插件 编辑:程序博客网 时间:2024/05/21 17:36
在Windows中,每个线程都与一个优先级设置相关。线程的优先级决定了线程接收的CPU时间的多少。低优先级的线程接收比较少的时间,高优先级的线程接收比较多的时间。当然,线程接收的CPU时间的多少对于它的执行性能以及它与系统中当前执行的其他线程之间的交互有着深远的影响。
在Windows中,线程优先级的设置是两个值的组合:进程总体的优先级类别以及相对于这个优先级类别的各个线程的优先级设置。也就是说,线程实际的优先级由进程的优先级类别和各个线程的优先级的组合来确定。后面会逐一讲述。
1. 优先级类别
在默认情况下,进程具有普通的优先级类别,大多数程序在其执行的声明周期内保持这个普通的优先级类别。尽管在本章的示例中没有改变优先级类别,但是为了完整起见,在此给出了线程优先级类别的简单概况。REALTIME_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
IDLE_PRIORITY_CLASS
在默认情况下,程序的优先级类别为NORMAL_PRIORITY_CLASS。通常,您不需要改变程序的优先级类别。事实上,改变进程的优先级类别对于整个计算机系统的性能会有负面的影响。例如,如果您将一个程序的优先级类别增加到REALTIME_PRIORITY_CLASS,它就会支配CPU。对于某些特殊的应用程序,可能需要增加应用程序的优先级类别,但通常并不需要。如前所述,本章的应用程序没有改变优先级类别。
当确实需要改变程序的优先级类别时,可以调用SetPriorityClass()。可以调用GetPriorityClass()来获取当前的优先级类别。这两个函数的原型如下:
DWORD GetPriorityClass(HANDLE hApp);
BOOL SetPriorityClass(HANDLE hApp, DWORD priority);
在此,hApp是进程的句柄。GetPriorityClass()返回应用程序的优先级类别,如果失败的话,返回0。对于SetPriorityClass(),priority指定了进程的新优先级类别。
2. 线程优先级
对于给定的优先级类别,各个线程的优先级确定了它在进程内接收的CPU时间的多少。当线程第一次创建时,它具有普通的优先级,但是您可以改变线程的优先级—— 即使在它执 行时。
可以通过调用GetThreadPriority()来获取线程的优先级设置。可以使用SetThreadPriority()来增加或者减小线程的优先级。这两个函数的原型如下:
BOOL SetThreadPriority(HANDLE hThread, int priority);
int GetThreadPriority(HANDLE hThread);
对于这两个函数而言,hThread是线程的句柄。对于SetThreadPriority(),priority是新的优先级设置。如果发生错误,则返回值为0;否则,返回非0值。GetThreadPriority()会返回当前的优先级设置。优先级设置按照从高到低的顺序如表3-1所示。
表3-1 优先级设置
线程优先级
值
THREAD_PRIORITY_TIME_CRITICAL
15
THREAD_PRIORITY_HIGHEST
2
THREAD_PRIORITY_ABOVE_NORMAL
1
THREAD_PRIORITY_NORMAL
0
THREAD_PRIORITY_BELOW_NORMAL
-1
THREAD_PRIORITY_LOWEST
-2
THREAD_PRIORITY_IDLE
-15
这些值相对于进程的优先级类别或增或减。通过组合进程的优先级类别和线程的优先级,Windows向应用程序提供了31个不同的优先级设置的支持。
如果有错误发生,则GetThreadPriority()返回THREAD_PRIORITY_ERROR_RETURN。
在大多数情况下,如果线程具有普通的优先级类别,那么可以随意地改变它的优先级设置,而不必担心会给整个系统的性能带来灾难性的影响。您将会看到,在下面部分开发的线程控制面板中,可以改变进程内线程的优先级设置(但是不能改变优先级类别)。
- Windows定义了6个优先级类别
- 感觉应该设个《用户体验》的博客类别了
- 如何定义一个类别
- 同一个标签定义多个样式优先级问题
- 通信流的QoS优先级类别
- 查看,调整优先级和调度类别
- 类别定义pop返回手势
- sap 物料类别的定义
- 客户端Bug优先级定义
- 客户端case优先级定义
- windows常数所属的类别
- Windows 服务的帐户类别
- Category 类别相关定义和操作方法
- 第一个windows程序新鲜出炉了
- 写了个存储过程获得table的完整定义
- propagation定义了7个事物传播行为
- Lodop中的一些优先级定义
- css+div定义的优先级
- IOS编程:Address Book
- C#中的StreamReader/StreamWriter
- 诠释的伤感独特个性日志发布:你是今生最让我伤心的人
- FIFA13游戏操作指南
- 自拍自作动感画册
- Windows定义了6个优先级类别
- 成本和费用的区别与联系
- 转载和积累系列 - linux时间同步命令
- Thread与Runnable你不知道的事
- 【算法导论】二叉查找树的操作C++实现
- html5特性
- 北风那个飘
- HP iLO 详细介绍
- MFC 刷新函数:Invaldate,UpdateWindow,InvaldateRect