为啥分离线程没有输出消息?

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() 来获得正确的结果。

以上是关于为啥分离线程没有输出消息?的主要内容,如果未能解决你的问题,请参考以下文章

为啥重新执行我的多线程代码后输出不一样?

多线程

为啥我的 Write-Verbose 消息没有出现?

当前线程为主线程,我想用PostThreadMessage 给当前线程(主线程)发送消息,没有反映这是为啥呀?

为啥我在使用 Spring Boot Application 的邮递员中没有收到错误消息

python多线程为啥会暂停一下,再接着跑? 跑一段时间,会暂停几秒钟,然后接着打印。