私は単純なサーバーを実装し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ですか?