【发布时间】:2012-03-22 13:15:06
【问题描述】:
我想使用 boost msm 状态机,但我很难想象它是如何工作的。假设我们只有 2 个状态(s1,s2),要从 s1 转到 s2,您需要触发事件 e1,而要返回则需要另一个 e2。 e1 和 e2 只能分别从 s1 和 s2 内触发。
现在在 main() 中,我首先启动状态机 (start()),然后会有一个 while 循环,每 1 分钟将返回到状态机,但必须从它离开的地方继续。ie
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()?
【问题讨论】:
-
显然状态机上的状态在 start() 和 process_event() 等调用之间持续存在。状态机不会在像 start() 这样的调用之后退出,它只有在达到终止状态时才会“退出”(或者更好的是,它会终止)。