C++线程-在循环中生成一个对象(类)

C++ threading - spawn an object (class) in loop?

本文关键字:一个对象 线程 循环 C++      更新时间:2023-10-16

我需要派生类对象。例如:

class Worker {
  Worker(int arg1, Object *obj);
  void workLoop() { while(true) { ... } }
}

我需要在创建对象的过程中生成循环线程。当我做这个"静态",它工作:

thread th1(&Worker::workLoop, Worker(args...));
thread th2(&Worker::workLoop, Worker(other args...));

但我不能循环产生这个。我试过了:

for (...) {
  thread th(&Worker::workLoop, Worker(...));
  threadsVector.push_back(std::move(th));
}

但只有第一个线程有效。

此外,我在工人班上有这样的:

std::thread spawn() {
    return std::thread(&Worker::workLoop, this);
}

我不知道如何做到这一点,也不知道为什么循环不能正确地生成我的线程。

尝试这个

class Worker{
   Worker(int arg, Object *obj)
   void workLoop() { while(true) { ... } }
}; // do not forget the semicolon
....
vector<thread> pool;
auto func = [](Worker w){
     w.workLoop();
};
// example with thread
for (int i = 0; i < 5; ++i)
   pool.push_back(thread(func, Worker(5, obj)));
for (int i = 0; i < pool.size(); ++i)
   pool[i].join();
// example

创建一个lambda表达式,该表达式接收一个worker对象并在内部调用workLoop方法然后可以将lambda作为对象传递,并在线程构造函数

中为其传递参数