正确的初始化线程的方法

时间:2018-04-07 15:10:56

标签: c++ multithreading

我有一个简单的类让我们称之为工作者

class Worker{
  Worker(){
    // Initialize
  }
  void runWorker(){
     while(1){ 
        //Do work
     }
  }
}

在新线程上初始化和运行事物类的正确C ++方法是什么?

1 个答案:

答案 0 :(得分:3)

如果您使用的是C ++ 11或更高版本,则会内置线程。

std::thread t([]() {
    Worker w; // construct as normal
    w.runWorker();
};

如果要在多个线程中使用相同的Worker,可以在线程外部构造它并在lambda中捕获它。

Worker w;
std::thread t1([&w]() {
    w.runWorker();
});
std::thread t2([&w]() {
    w.runWorker();
});

如果您使用后一种方法,请确保w不会超出范围,因为它是通过引用捕获的。