初始化线程的正确方法



我有一个简单的类,我们称之为worker

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

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

如果您使用的是 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不会超出范围,因为它是通过引用捕获的。

最新更新