我需要生成类对象。例如:
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);
}
我不知道这个以及为什么循环无法正确生成我的线程。
答案 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作为一个对象传递,并在线程构造函数
中传递一个参数