提升::绑定和io_service的问题
Trouble with boost::bind and io_service
嗨,我目前正在尝试为io_service对象创建一个线程池。
我还找到了如何执行此操作的示例(请参阅此处,示例 1f:http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=2 (
该示例(当然(也有效,但是我宁愿尝试使io_service保持非全局(在示例中(。所以现在我想过尝试将io_service作为参数传递给工作线程,从而保持"内部"。
boost::thread_group似乎不支持传递参数(目前(,所以我尝试使用 boost::bind 来做到这一点
结果代码如下所示:
void workerThread(io_service service)
{
service.run();
}
void initListeners() //this function gets called in the main function
{
io_service io_service;
//we give the io_service something to work here
boost::thread_group worker_threads;
for(int i = 0; i < 4; ++i)
worker_threads.create_thread(boost::bind(workerThread, io_service));
worker_threads.join_all();
}
但是当我尝试编译此代码时,他给了我错误
错误 C2248:"提升::noncopyable_::不可复制::不可复制":无法访问在类"boost::noncopyable_::不可复制"中声明的私有成员
此诊断发生在编译器生成的函数"boost::asio::io_service::io_service(const boost::asio::io_service &(">
这是否意味着我根本无法将io_service对象作为参数传递?
如果是,那么如何在不将io_service作为全局对象的情况下执行此线程池?
如果没有,那么使用上面的代码,这个问题的解决方案会是什么样子的?
您需要
通过引用而不是值传递io_service:
io_service &service
作为论据和
boost::ref(io_service)
作为要绑定的参数。
请注意,您必须在 io_service
的生存期结束之前加入所有线程,否则您将获得无效的引用。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++ API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL依赖项问题
- 在windows7上从windows Service执行Notepad.exe时出现问题