問題タブ [boost-msm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - コルーチンで MSM + ASIO をブーストします。シンプルなテストケースが機能しない
ドキュメントの 2 つのブーストの例を組み合わせた小さな例を作成しようとしています。1 つ目は MSM (ステート マシン) ライブラリの例です: https://www.boost.org/doc/libs/1_75_0/libs/msm/doc/HTML/examples/AnonymousTutorialWithFunctors.cpp 2 つ目はエコーです。 Asio のサーバー (コルーチンを含む) の例: https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/example/cpp17/coroutines_ts/refactored_echo_server.cpp エコー サーバーの例は、私のマシンで正しく動作します。
ステート マシンには 2 つの状態がAsioInitState
ありRegisterServersState
、遷移テーブルには匿名遷移が 1 つだけあります。
私のソースコードに従ってください: EchoServerMSM.h
main.cpp
私が得るコンソール出力は次のとおりです。
listener - 1
がコンソールに出力されないのはなぜですか?- キューに他のコルーチンがある場合、io_context はどのように実行を終了しますか?
this_coro::executor
リスナーには何が表されていますか? で切り替えても同じでしょう*(fsm.io_context)
か?- エコーサーバーの例として機能させるために必要な他の手順はありますか?
編集:コンパイルするためのcmake(winまたはmac):
boost - stop() の msm 使用量を増やす
boost::msm を使用すると、stop 関数の動作が予想とは異なることに気付きました。私がすると言いましょう
停止後、それ以上のイベントは処理されないと思います。ただし、ここでの出力は
完全な例はこちらhttps://godbolt.org/z/o88ze6641
ステート マシンがさらにイベントを受け入れるのを妨げない場合、 stop()はどのように使用しますか? 現在の状態の on_exit をトリガーすることは知っていますが、状態を離れた後に状態に再入するのは奇妙に思えます。