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