gpt4 book ai didi

c++ - boost::this_thread::get_id 在 exit() 调用期间不返回 id

转载 作者:太空狗 更新时间:2023-10-29 21:49:24 24 4
gpt4 key购买 nike

我有一个相当简单的 C++ 应用程序,其中有几个线程 - 主线程和一个工作线程。工作线程等待通过网络发送的数据包,并在收到断开连接时调用 exit(0)。

这会导致负责线程的类的析构函数运行。这个析构函数通常从主线程运行,并导致工作线程(如果正在运行)停止,然后调用 join 等待它停止。这是析构函数的代码:

if( m_thread.get_id() == boost::this_thread::get_id() )
{
return;
}
if ( m_thread.joinable() )
{
m_runThread = false;
m_thread.join();
}

我的问题是,这条线

if( m_thread.get_id() == boost::this_thread::get_id() )

返回 false,尽管我从调试中可以看出这段代码肯定是在 m_thread 引用的线程上运行。

进一步研究后,boost::this_thread::get_id() 此时返回 id 0。但是,visual studio 调试器和 win32 API 函数 GetCurrentThreadId 仍然能够正确识别线程 ID。

谁能解释一下?在应用程序关闭期间是否未正确支持 boost::this_thread,可能是因为此时它已被破坏?

最佳答案

您不应该在线程中调用exit!此函数退出整个进程,而不仅仅是线程。只需从线程函数返回即可。

关于c++ - boost::this_thread::get_id 在 exit() 调用期间不返回 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8268468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com