Мне нужно создать объект класса. Например:
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));
}
... но работает только первая нить.
Кроме того, у меня в классе Worker это:
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
создайте выражение лямбда, которое принимает рабочий объект и вызывает метод workLoop внутри, тогда вы можете передать лямбду в качестве объекта и передать ему аргумент внутри конструктора потока