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

时间:2014-09-15 22:28:28

标签: c++ multithreading c++11

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

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);
}

我不知道这个以及为什么循环无法正确生成我的线程。

1 个答案:

答案 0 :(得分:3)

试试这个

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作为一个对象传递,并在线程构造函数

中传递一个参数