0

boost::msm を使用すると、stop 関数の動作が予想とは異なることに気付きました。私がすると言いましょう

    sm state_machine;
    state_machine.start(); 
    state_machine.process_event(event_a()); pstate(state_machine);
    
    std::cout << "stop sm" << std::endl;
    state_machine.stop();

    std::cout << "process_event after stop!" << std::endl;

    state_machine.process_event(event_b()); pstate(state_machine);

停止後、それ以上のイベントは処理されないと思います。ただし、ここでの出力は

entering: State Maschine
entering: state_a
leaving: state_a
action a->b
entering: state_b
-> B
stop sm
leaving: state_b
leaving: State Maschine
process_event after stop!
leaving: state_b
action b->a
entering: state_a
-> A

完全な例はこちらhttps://godbolt.org/z/o88ze6641

ステート マシンがさらにイベントを受け入れるのを妨げない場合、 stop()はどのように使用しますか? 現在の状態の on_exit をトリガーすることは知っていますが、状態を離れた後に状態に再入するのは奇妙に思えます。

4

1 に答える 1