在SCXML状态机中,我如何说“在进入此状态3分钟后触发事件,但如果我在该状态停留2.9分钟然后离开,则不要触发。如果我重新进入该状态,请重新启动计时器(不要在0.1分钟内触发)”?
<send>
触发延迟事件(任意名称,例如“timeout”),当您进入状态时,并在退出状态时使用<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>
s
(秒)或ms
(毫秒)来表示延迟持续时间。因此,3分钟为180s
。<send>
元素具有id
属性,而不是sendid
属性。(而且,<cancel>
元素使用sendid
属性。) - Phrogz