经典指数          
原因
3730
浏览数
0
收藏数
 

如何让一个循环执行的线程安全现出,请用C++代码实现相应线程函数及退出机制。

     举报   纠错  
 
切换
1 个答案

在要终止线程的线程函数的循环中使用一个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);

}

 
切换
撰写答案