0

我注意到使用 boost::msm 时,停止函数的行为与我预期的不同。可以说我愿意

    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

0

我知道它触发了当前状态的 on_exit

没错,这就是方法的重点

但是离开后重新进入状态对我来说似乎很奇怪。

好吧,这奇怪,如果它是由于stop(). 但事实并非如此:那只是因为您处理了另一个事件。

于 2021-09-29T21:11:14.313 回答