您好我目前正在尝试为 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:“boost::noncopyable_::noncopyable::noncopyable”:无法访问在类“boost::noncopyable_::noncopyable”中声明的私有成员
此诊断发生在编译器生成的函数'boost::asio::io_service::io_service(const boost::asio::io_service &)'
这是否意味着我根本不能将 io_service 对象作为参数传递?
如果是,那么我如何在没有 io_service 作为全局对象的情况下执行此线程池?
如果没有,那么上面的代码如何解决这个问题?