gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:43:49 25 4
gpt4 key购买 nike

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

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

创建一个 lambda 表达式,它接受一个 worker 对象并调用里面的 workLoop 方法然后你可以将 lambda 作为对象传递,并在线程构造函数中将参数传递给它

关于C++ 线程 - 在循环中生成一个对象(类)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25857866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com