在SCXML状态机中创建超时

时间:2013-02-25 23:00:40

标签: state-machine scxml

在一个SCXML状态机中,我怎么能说“在我进入这个状态3分钟后发生一次事件,但如果我在该状态下坐了2.9分钟然后离开就不行。如果我重新开始 - 进入状态,重新启动计时器(不要在0.1分钟后关闭)“

1 个答案:

答案 0 :(得分:4)

当您进入状态时,使用<send>触发延迟事件(具有任何名称,例如“超时”),并在退出状态时使用<cancel>以删除计时器。您必须确保为计划稍后取消的每个<send>实例创建唯一ID。

<scxml xmlns='http://www.w3.org/2005/07/scxml' version='1.0'>
  <state id="s1">
    <onentry><send id="state1-timer" event="timeout" delay="180s"/></onentry>
    <onexit><cancel sendid="state1-timer"/></onexit>
  </state>
  <!-- ... --->
</scxml>

注意:根据CSS2 time spec,您只能使用s(秒)或ms(毫秒)作为延迟时间。因此,3分钟为180s