我正在使用boost::asio
并考虑 io-service-per-cpu 模型(每个 io_service 有一个线程)来实现简单的服务器。
我想要做的是,让 io_service 向另一个 io_service 请求一些工作(类似于消息传递)。
我认为boost::asio::io_service::post
可以帮助我。
有两个io_service
, 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) } );
} );
这段代码有效吗?有没有更聪明、更简单的方法?
编辑:
我发现里面的第二个 lamdaios1.post()
无法到达函数指针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
?