不在构造函数中运行std :: thread

时间:2018-06-30 16:59:17

标签: c++ std stdthread

我想了解如何使用std::threadstd::thread的大多数教程都是这样的

void foo() { ... }
....
std::thread thread(foo);
....
thread.join();

好的,我知道我们可以在构造函数中指定附加到线程的函数。但是,我们还有其他方法吗?

换句话说,运行t3线程需要插入什么?

#include <thread>
#include <iostream>

void print(const char* s){
    while (true)
        std::cout << s <<'\n';
}

int main() {

    std::thread t1(print, "foo");
    std::thread *t2;
    t2 = new std::thread(print, "bar");
    std::thread t3; // Don't change this line
    // what I need to put here to run t3 ?

    t1.join();
    t2->join();
    t3.join();
    delete t2;
    return 0;
}

1 个答案:

答案 0 :(得分:3)

t3本质上是一个虚拟线程。查看参考,默认的构造函数说:

  

创建不代表线程的新线程对象。

但是由于std::thread具有operator=(std::thread&&),因此可以通过将新线程移入变量来使其代表实际线程:

t3 = std::thread(print, "foobar");

这将创建并启动一个新线程,然后将其分配给t3