为啥分离线程没有输出消息?
Posted
技术标签:
【中文标题】为啥分离线程没有输出消息?【英文标题】:why does detach thread get no output message?为什么分离线程没有输出消息? 【发布时间】:2019-11-21 09:01:23 【问题描述】:我正在测试如下的 cpp 代码,并得到一个非常令人困惑的现象,下面的代码不打印“标签”字符串。谁能解释一下?非常感谢您的帮助!
class Data
public:
Data() std::cout << __FUNCTION__ << std::endl;
~Data() std::cout << __FUNCTION__ << std::endl;
void show() std::cout << label << std::endl;
private:
std::string label"label";
;
int main()
auto data = std::make_shared<Data>();
std::thread t([=]() mutable
data->show();
);
t.detach();
【问题讨论】:
没有什么能阻止你的程序在线程有时间运行之前退出。 是的,我知道使用 join() 可以获得正确的结果,但我只是想了解如果使用 detach() 会发生什么,为什么没有输出了。 【参考方案1】:正如 Mat 在评论部分已经提到的,没有什么可以阻止程序在线程开始之前结束。
将t.detach()
更改为t.join()
。
来自cppreference join
等待线程完成其执行
【讨论】:
谢谢。是的,我使用 detach() 的原因是试图理解分离效果。我知道我可以使用 join() 来获得正确的结果。以上是关于为啥分离线程没有输出消息?的主要内容,如果未能解决你的问题,请参考以下文章
当前线程为主线程,我想用PostThreadMessage 给当前线程(主线程)发送消息,没有反映这是为啥呀?