我想使用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()停止。状态机仅捕获系统状态,并可以在系统更改状态时调用某些功能。您将如何使用它取决于应用程序。

07-24 14:11