我想使用boost msm状态机,但是我很难想象它是如何工作的。假设我们只有2个状态(s1,s2),要从s1转到s2,您需要触发事件e1,而要退回,则需要另一个e2。
e1和e2只能分别从s1和s2内部触发。
现在在main()中,我首先启动状态机(start()),然后有一个while循环,每隔1分钟将回到状态机,但必须从它离开的地方开始。
main()
{
MSM.start(); //start state machine
while (a_condition)
{
ProcessInputsfromIO();
Go_backtoStatemachine(); //how can i do this?
delay(1min)
}
MSM.stop();
}
因此,基本上,当一个状态完成执行时,状态机将退出,然后有1分钟的延迟,然后while循环将需要使我回到退出之前的状态,否则我认为这应该实现状态机。
我要求的与众不同吗?如果是,那么人们如何实现非阻塞状态机?如果没有,那么如何实现Go_backtoStatemachine()?
最佳答案
这里有一个非常简单的示例:
MSM Simple Tutorial
state machine是一个抽象概念。它具有状态,事件等。它实际上没有阻塞,非阻塞等概念。在Boost MSM的框架内,您可以调用start()
进入初始状态,process_event()
注入(inject)事件,而stop()
停止。状态机仅捕获系统状态,并可以在系统更改状态时调用某些功能。您将如何使用它取决于应用程序。