私は単純なサーバーを実装しboost::asio
、io-service-per-cpu モデルを考えています (各 io_service には 1 つのスレッドがあります)。
私がやりたいことは、io_service が別の io_service にいくつかのジョブを要求できるようにすることです (メッセージ パッシングのようなもの)。
私はboost::asio::io_service::post
私を助けることができると思います。
io_service
、ios1
、ios2
、の2 つがあります。
と仕事(機能)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()
内部の 2 番目のラムダが関数 pointer に到達できないことがわかりましたcallback
。範囲外なので、 を使って別の方法を試していboost::bind()
ます。
ios2.post(
[&ios1, arg_ptr, callback, func]
{
ios1.post( boost::bind( callback, func(arg_ptr) ) );
} );
スタック変数 bool を 1 つ削除したところ、改善されたようです。
しかし、c++11 ラムダとboost::bind
一緒に使用するのはあまりクールに見えません。
なしでこれを行うにはどうすればよいboost::bind
ですか?