C++线程-在循环中生成一个对象(类)
C++ threading - spawn an object (class) in loop?
我需要派生类对象。例如:
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作为对象传递,并在线程构造函数
相关文章:
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- asio 链对象线程安全吗?
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- 如何更改此notify_one以便它选择一个随机线程
- C++ 杀死一个标准::线程
- C++:一个写入器/多个读取器访问一个unordered_map线程安全
- 如果不同的线程调用另一个不同线程的相同信号,则需要静音
- 如何在一个POSIX线程中组合两种不同的等待机制
- 是否可以在全球范围内声明一个提升线程
- 为什么一个omp线程完成,而另一个却不能完成
- 创建一个 boost::线程 带有 boost::bind() 或不带
- 两个窗口-一个由线程随机输出修改
- 有没有一种方法可以为类的每个对象提供一个boost线程
- 本地静态函数对象线程安全的初始化
- volatile变量在一个客户线程和一个生产者线程中是否安全
- 在qt中创建另一个网络线程
- C++11 多个读取和一个写入线程互斥锁
- 如何启动一个 boost::线程运行一个成员函数
- 对于 c++11 之前的编译器,返回本地静态对象线程是否安全
- 从一个对象线程中使用 const 方法是否安全