SetThreadPriority函数设置指定线程的优先级值。该值与线程进程的优先级类一起确定线程的基本优先级。
BOOL SetThreadPriority(
HANDLE 【hThread】, | //处理线程 |
INT 【优先】 | //线程优先级 |
); |
参数
【hThread】
标识要设置优先级值的线程。
Windows NT:句柄必须具有与之相关联的THREAD_SET_INFORMATION访问权限。有关详细信息,请参阅线程对象.
【优先】
指定线程的优先级值。此参数可以是以下值之一:
优先 | 含义 |
THREAD_PRIORITY_ABOVE_NORMAL | 表示优先级高于正常优先级1点。 |
THREAD_PRIORITY_BELOW_NORMAL | 表示优先级不超过正常优先级的1分。 |
THREAD_PRIORITY_HIGHEST | 表示优先级高于正常优先级的2分。 |
THREAD_PRIORITY_IDLE | 表示IDLE_PRIORITY_CLASS,NORMAL_PRIORITY_CLASS或HIGH_PRIORITY_CLASS进程的基本优先级为1,REALTIME_PRIORITY_CLASS进程的基本优先级为16。 |
THREAD_PRIORITY_LOWEST | 表示优先级低于正常优先级的2分。 |
THREAD_PRIORITY_NORMAL | 表示优先级的正常优先级。 |
THREAD_PRIORITY_TIME_CRITICAL | 表示IDLE_PRIORITY_CLASS,NORMAL_PRIORITY_CLASS或HIGH_PRIORITY_CLASS进程的基本优先级为15,REALTIME_PRIORITY_CLASS进程的基本优先级为31。 |
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
每个线程都具有由线程的优先级值及其进程的优先级等级确定的基本优先级。系统使用所有可执行线程的基本优先级来确定哪个线程获得下一个CPU时间片。线程在每个优先级别以循环方式安排,只有在较高级别没有可执行的线程时才会进行较低级别的线程调度。
SetThreadPriority功能允许设置线程的基本优先级相对于其进程的优先级。例如,对IDLE_PRIORITY_CLASS进程的线程调用SetThreadPriority中指定THREAD_PRIORITY_HIGHEST会将线程的基本优先级设置为6。对于显示优先级和线程优先级值的每个组合的基本优先级的表,请参阅SetPriorityClass功能。
对于IDLE_PRIORITY_CLASS,NORMAL_PRIORITY_CLASS和HIGH_PRIORITY_CLASS进程,当事件发生对线程很重要时,系统会动态提升线程的基本优先级。REALTIME_PRIORITY_CLASS进程不接收动态提升。
所有线程最初从THREAD_PRIORITY_NORMAL开始。使用GetPriorityClass和SetPriorityClass函数来获取和设置进程的优先级。使用GetThreadPriority函数获取线程的优先级值。
使用进程的优先级来区分时间关键的应用程序和正常或低于正常调度要求的应用程序。使用线程优先级值来区分进程任务的相对优先级。例如,处理窗口输入的线程可能具有比执行CPU密集计算的线程更高的优先级。
在操作优先级时,要小心确保高优先级线程不占用所有可用的CPU时间。基本优先级高于11的线程会干扰操作系统的正常运行。使用REALTIME_PRIORITY_CLASS可能会导致磁盘缓存不刷新,挂起鼠标等等。
也可以看看