5

SCXML状态机中,我怎么能说“在我进入此状态 3 分钟后触发一个事件,但如果我在该状态下坐 2.9 分钟然后离开,则不会。如果我重新进入该状态,请重新启动计时器(不要不要在 0.1 分钟内关闭)”

4

1 回答 1

6

用于<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 时间规范,您只能使用s(seconds) 或ms(milliseconds) 作为延迟时间。因此,3 分钟是。180s

于 2013-02-25T23:00:40.043 回答