线程的挂起和恢复
挂起:暂停线程的执行----函数:SuspendThread(一个参数:想将哪个线程进行暂停,进行挂起)
恢复:就是从挂起状态恢复线程的正常运行----函数ResumeThread(一个参数,要恢复线程的句柄)
---->我们在MFC中添加两个按钮(暂停和恢复),点击暂停按钮,将当前线程暂停,点击恢复,让当前暂停的线程恢复执行。代码如下:
HANDLE hThread = NULL;//创建一个线程句柄
void C多线程相关操作Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CWinThread *pThread = AfxBeginThread(ThreadProc,(LPVOID)100);
hThread = pThread->m_hThread;
}
void C多线程相关操作Dlg::OnBnClickedSuspendBtn()
{
// TODO: 在此添加控件通知处理程序代码
SuspendThread(hThread);
}
void C多线程相关操作Dlg::OnBnClickedResumeBtn()
{
// TODO: 在此添加控件通知处理程序代码
ResumeThread(hThread);
}
执行效果如图:
注意:线程的挂起和恢复是有次数的,你进行了多少次挂起,就要进行多少次恢复,如果挂起两次回复一次,则当前线程的状态还是挂起的状态。
线程的优先级
线程的相对优先级有以下取值
该值可在AfxBeginThread函数的第三个参数中设定,默认为标准。
线程的优先级有什么用?
如果说一个线程的优先级比较高,那么对于CPU来说就会更着重于调用优先级较高的线程,而且高优先级线程可以打断低优先级线程,也就是说高优先级的线程可以获得更多的CPU执行时间,一般情况下设置成Normal就可以了,不要让整个电脑都围着你转。
线程的退出和终结
最好的方式:让线程函数主动退出 return,正常的退出线程,正常的去释放该线程申请的一些空间以及调用该线程函数内一些类对象的析构函数。
当然有其他方式强行结束,但请远离使用!