我有一个如下的代码

void CLogThread::run()
{
    m_alive = True;  //only place where m_alive (declared volatile) set to true 

    while (m_alive)
    {
        //logic here
    }   
}


void CLogThread::stop()
{
    m_alive = False;
}




void CThreadManager::uninit() throw()
{
    try
    {
        if (m_pLogThread != NULL)
        {
            m_pLogThread->stop();
            (void)m_pLogThread->getThreadControl().join();
            m_pLogThread->uninit();
            m_pLogThread = NULL;    
        }

    }
    catch (...)
    {
    }
}
.

我试图优雅地退出该过程。但问题很少我看到程序挂在加入。

线程仍然在Infinite中仍然处于活动状态时。即使在停止调用后,m_alive值也是“true”(停止其设置为false)。M_Alive声明为易失性。

有帮助吗?

解决方案

找到了m_alive为true的原因。

因为,当我们创建一个线程时(通常调用“开始”函数),调用在不同的线程中,它继续执行。随着时间的语“开始”完成并调用停止,新线程尚未安排。所以“运行”未开始。稍后运行开始时,再次将m_alive的值重置为true ....

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top