1 线程挂起
-
SuspendThread()
DWORD SuspendThread( HANDLE hThread ); // 参数是需要被挂起的线程句柄 // 函数执行成功时.返回值是在本次挂起操作前,该线程被挂起的次数,之后线程的挂起次数加一 // 函数执行失败时,返回值为-1.可以进行GetLastError()
2 线程恢复
-
ResumeThread()
DWORD ResumeThread( HANDLE hThread ); // 参数是需要被恢复挂起的线程句柄 // 函数执行成功时,返回值是在本次恢复操作前,该线程被挂起的次数,之后线程的挂起次数减一 // 函数执行失败时,返回值为-1.可以进行GetLastError()
-
注意
- 线程的挂起和恢复的次数应该是一一对应的,挂起几次,就应该恢复几次
3 线程优先级
// 线程的优先级是和所属父进程的优先级,相互作用,共同决定了该线程在系统中的优先级
// 线程层面的优先级共分为7级:
THREAD_PRIORITY_TIME_CRITICAL: 实时的,优先级最高
THREAD_PRIORITY_HIGHEST: 次高
THREAD_PRIORITY_ABOVE_NORMAL: 高于标准
THREAD_PRIORITY_NORMAL: 标准优先级,也即是默认优先级(通常情况下 )
THREAD_PRIORITY_BELOW_NORMAL: 低于标准
THREAD_PRIORITY_LOWEST: 次低
THREAD_PRIORITY_IDLE: 空闲.优先级最低
// AfxBeginThread()创建线程时,参数应该指定优先级或者默认
// CreatThread()创建线程后,需要指定优先级,如下所示
BOOL GetThreadContext(
HANDLE hThread, // 线程句柄
LPCONTEXT lpContext // 指向一个用于指定优先级的结构(_IN)
);
BOOL SetThreadContext(
HANDLE hThread, // 线程句柄
CONST CONTEXT *lpContext // 只有一个用于指定优先级的结构(_OUT)
);