如何让一个循环执行的线程安全现出,请用C++代码实现相应线程函数及退出机制。
在要终止线程的线程函数的循环中使用一个while循环从线程的消息队列中取出消息,判断有没有终止线程消息,如果有的话则return安全终止该循环执行的线程,代码如下:
//从消息队列中逐个读取消息
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
//如果收到终止线程消息WM_THREAD_STOP,则return安全退出线程
if(msg.message==WM_THREAD_STOP)
{
return;
}
}
在终止该线程的代码中向要终止的线程发送一个WM_THREAD_STOP消息从而使要终止的线程接收到该消息之后退出:
//判断线程类对象是否存在,如果存在则发送线程终止消息,pThread为调用AfxBeginThread函数所返回的指向线程类对象的指针
if(pThread)
{
//将终止线程消息发送给要终止的线程
::PostMessage(pThread->m_nThreadID,WM_THREAD_STOP,0,0);
}