如何在州内创建状态机?

时间:2018-04-10 06:21:48

标签: c++ state-machine rhapsody

我希望拥有一个不太多状态的顶级状态图。因此,通常(即在纯C ++中)每个状态可以是状态机本身。我怎么能在狂想曲中做到这一点?

例如:我有状态图:

*--> init --> do_stuff --> finished

当它进入do_stuff状态时,我希望它下拉到do_stuff_statechart(我猜这只是另一个带状态图的普通类):

*--> read_config --> check_config --> init_reconfig --> doing_config --> exit
          ^               |
          |               |
          +---------------+

当子状态图到达exit时,它应该返回到顶级状态图并进入完成状态......

我无法真正看到如何做到这一点。我的意思是我可以将一个事件调用到另一个状态图表并等待它做出回应 - 但是接下来是"图表"将do_stuff状态链接到do_stuff_statechart的方法?

这有什么例子吗?或者是否有"模式"这样做?

2 个答案:

答案 0 :(得分:1)

好吧,如果你需要一个状态机来处理状态机中的状态,你有两个选择:

  1. 强制从属状态机运行完成后再返回主状态机管理器 这完全消除了您使用主状态机中的从属状态机这一事实,但降低了透明度,可能需要更多资源,并可能对可中断性产生影响。

  2. 向状态机添加一些额外状态,由状态机处理为不透明状态,但从状态机将使用它来处理自身。
    您仍然需要将节点分区为设置,运行和拆卸。除此之外,还需要更多的调度才能到达正确的子状态处理程序。

  3. 通过用主状态机的所有节点替换主状态机中的节点来展平状态空间。
    唯一的缺点是从属状态机与主状态机基本上没有绝缘。

  4. 现在,您可以自行决定最适合您用例的内容。

答案 1 :(得分:1)

在Rhapsody中,右键单击状态图中的状态时,您应该在上下文菜单中看到一个名为"创建子状态图"的选项。

这就是你要找的东西吗?