进程优先级与线程优先级
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进程优先级与线程优先级
学习各种高级外挂制作技术,马上去百度搜索"魔鬼作坊",点击第一个站进入,快速成为做挂达人。
SetThreadPriority与SetPriorityClass区别
知识点:
线程优先级
获取当前线程句柄
线程优先级设置
线程优先级变动
线程优先级获取
线程优先级(Thread priority)
简单的说就是(线程)的优先级越高,那么就可以分占相对多的CPU时间片。每个进程都有相应的优先级,优先级决定它何时运行和占用CPU时间。最终的优先级共分32级,是从0到31的数值,称为基本优先级别。
进程优先级priority class标志优先级值
idle(低)IDLE_PRIORITY_CLASS4
Below低于标准BELOW_NORMAL_PRIORITY_CLASS此值在2000以下系统不支持
normal(标准)NORMAL_PRIORITY_CLASS9(前台)或7(后台) Above高于标准ABOVE_NORMAL_PRIORITY_CLASS此值在2000以下系统不支持
high(高)HIGH_PRIORITY_CLASS13
realtime(实时)REALTIME_PRIORITY_CLASS24
一个线程创建的时候,会继承进程的优先级等级。另外线程优先级可以用SetThreadPriority 来进行微调:
线程优先级等级标志优先级值
1idle(最低)THREAD_PRIORITY_IDLE如果进程优先级为realtime则调整为16,其它情况为1
2LOWEST低THREAD_PRIORITY_LOWEST-2(在原有基础上-2)
3BELOW低于标准THREAD_PRIORITY_BELOW_NORMAL -1(在原有基础上-1)
4NORMAL(标准)THREAD_PRIORITY_NORMAL不变(取进程优先级值)
5ABOVE高于标准THREAD_PRIORITY_ABOVE_NORMAL
+1(在原有基础上+1)
6HIGHEST(高)THREAD_PRIORITY_HIGHEST+2(在原有基础上+2)
7CRITICAL(最高)THREAD_PRIORITY_TIME_CRITICAL如果进程优先级为realtime则调整为31,其它情况为15
二、获取当前线程句柄
HANDLE GetCurrentThread(VOID)
//返回当前进句柄
DWORD GetCurrentThreadId(VOID)
//返回当前进程ID值
1、其它线程函数
BOOL SetThreadPriority设置一个线程的优先级别
int GetThreadPriority返回一个线程的优先级别
SetThreadPriorityBoost设置线程是否禁用动态调整优先级功能。GetThreadPriorityBoost获取线程是否禁用了优先级微调功能。
三、线程优先级的设置
BOOL SetThreadPriority
(
HANDLE hThread,//线程句柄handle to the thread
int nPriority//要设置线程优先级别thread priority level
);
void CDialog_PROCESS::OnBnClickedRadio7()
{
//TODO:在此添加控件通知处理程序代码
BOOL r=0;
UpdateData(true);
switch(m_radio_thread_selNum)
{
case0:
r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_IDLE);//设置为最低
TRACE("thread=%d,%04x set priority to THREAD_PRIORITY_IDLE
\n",GetCurrentThreadId(),GetCurrentThreadId());
break;
case1:
r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST);//设置为较低
TRACE("thread=%d,%04x set priority to THREAD_PRIORITY_LOWEST \n",GetCurrentThreadId(),GetCurrentThreadId());
break;
case2:
r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_BELOW_NORMAL);//设置为低于标准
TRACE("thread=%d,%04X set priority to
THREAD_PRIORITY_BELOW_NORMAL\n",GetCurrentThreadId(),GetCurrentThreadId());
break;
case3:
r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL); //设置为标准
TRACE("thread=%d,%04X set priority to
THREAD_PRIORITY_NORMAL\n",GetCurrentThreadId(),GetCurrentThreadId());
break;
case4:
r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);//设置为高于标准
TRACE("thread=%d,%04X set priority to
THREAD_PRIORITY_ABOVE_NORMAL\n",GetCurrentThreadId(),GetCurrentThreadId());
break;
case5:
r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST); //设置为较高
TRACE("thread=%d,%04X set priority to
THREAD_PRIORITY_HIGHEST\n",GetCurrentThreadId(),GetCurrentThreadId());
break;
case6:
r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);//设置为最高
TRACE("thread=%d,%04X set priority to
THREAD_PRIORITY_TIME_CRITICAL\n",GetCurrentThreadId(),GetCurrentThreadId());
break;
default:
break;
}
}