为什么std :: thread阻塞执行?

时间:2017-06-26 07:33:44

标签: c++ multithreading

我希望在一个单独的线程中运行一个类方法:

std::thread myThread(&Class::method, this);
myThread.join();
//Other events

执行此操作时,其他事件仅在Class:方法结束时发生,而不是同时发生。

我忘了什么?

2 个答案:

答案 0 :(得分:1)

您正在线程上调用.join(),该线程将阻塞直到该线程完成,与该线程同时运行并在您要同时运行的所有其他内容之后调用join() ,或者在线程对象上调用detach()

例如

auto th = std::thread{[]() { ... }};
do_something();
th.join();

此示例中do_something()将与线程th同时运行,或者您可以调用detach()

std::thread{[]() { ... }}.detach();
do_something();

答案 1 :(得分:0)

这就是:

  1. 启动一个主题并让它运行& Class :: method

    std::thread myThread(&Class::method, this);

  2. 等到线程结束。

    myThread.join();

  3. 在当前线程中做其他事情

    //Other events

  4. 如您所见,您的myThread.join()暂停了当前的帖子。

    请改为:

    std::thread myThread(&Class::method, this);
    //Other events
    myThread.join();
    

    可替换地;请勿执行此加入并转而致电myThread.detach();