线程加入永远等待:加入挂起或永远等待
-
26-12-2019 - |
题
我有一个如下的代码
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 ....
不隶属于 StackOverflow