【发布时间】:2013-02-14 03:47:31
【问题描述】:
我正在使用boost::asio 实现简单的服务器,并考虑 io-service-per-cpu 模型(每个 io_service 有一个线程)。
我想做的是,让一个 io_service 向另一个 io_service 请求一些工作(类似于消息传递)。
我认为boost::asio::io_service::post 可以帮助我。
有两个io_services,ios1,ios2,
还有一份工作(功能)bool func(arg *),
还有一个完成处理程序void callback(bool)。
所以我想让ios1 请求工作,ios2 运行它并通知ios1 完成,最后ios2 运行处理程序。
ios2.post(
[&ios1, arg_ptr, callback, func]
{
bool result = func(arg_ptr);
ios1.post( []{ callback(result) } );
} );
这段代码有效吗?有没有更聪明更简单的方法?
编辑:
我发现ios1.post()里面的第二个lamda无法到达函数指针callback。它超出了范围......所以我正在尝试使用 boost::bind() 的另一种方式。
ios2.post(
[&ios1, arg_ptr, callback, func]
{
ios1.post( boost::bind( callback, func(arg_ptr) ) );
} );
我删除了一个堆栈变量 bool,它看起来更好。
但是同时使用 c++11 lambda 和 boost::bind 看起来并不那么酷。
如果没有boost::bind,我该怎么做?
【问题讨论】:
标签: c++ multithreading c++11 lambda boost-asio