c++ Boost,在类中使用thread_group
C++ Boost, using thread_group in a class
class c
{
public:
int id;
boost::thread_group thd;
c(int id) : id(id) {}
void operator()()
{
thd.create_thread(c(1));
cout << id << endl;
}
};
我创建了类c。每个类对象创建线程来处理工作。然而,当我编译这个
时,我得到了这个奇怪的消息:错误C2248: 'boost::thread_group::thread_group':无法访问在'boost::thread_group'类中声明的私有成员
另外,只要假定没有递归调用问题。
问题是你的代码设置的方式是传递你的对象的副本来创建一个新线程。
你得到这个错误是因为boost::thread_group的复制构造函数是私有的,所以你不能复制类c的对象。你不能复制类c的对象,因为默认的复制构造函数试图复制所有成员,它不能复制boost::thread_group。因此编译器错误。
经典的解决方案是,要么编写自己的复制构造函数,不尝试复制boost::thread_group(如果你实际上想要每个调用一个唯一的thread_group),要么将boost::thread_group存储在某种可以复制的指针中(这将共享组,并且可能是你想要的)。
注意:
通常不编写自己的操作符(),而只是传递boost::函数更简单。这可以用
来完成#include <boost/thread.hpp>
#include <iostream>
using namespace std;
class c
{
public:
boost::thread_group thd;
void myFunc(int id)
{
boost::function<void(void)> fun = boost::bind(&c::myFunc,this,1);
thd.create_thread(fun);
cout << id << endl;
}
};
请注意,类c中的任何内容都是共享的,而在函数调用中通过值传递的任何内容都不是共享的。
相关文章:
- 在std::thread中,joinable()然后join()线程安全吗
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 分离一个静态常量 std::thread?
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何从 std::thread 返回值
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 将 std::thread by 值推送到列表中
- 转发变量参数列表以模拟 std::thread
- 嵌入式设备 -> std::thread -> FreeRTOS?
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- std::thread 增加 DLL 引用计数,从而防止卸载 DLL
- 如何防止 std::thread 在 QT 中冻结 GUI?
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- C++ - Thread Pool
- 为什么参数在构造 std::thread 时移动两次
- std::thread::_Invoker 使用线程编程时出错
- 在线程 A 中创建一个 std::thread 对象,在线程 B 中连接
- 为什么编译器抱怨 std::thread 参数在转换为右值后必须是可调用的?