Recursion scxml事件中的循环调用

Recursion scxml事件中的循环调用,recursion,scxml,apache-commons-scxml,Recursion,Scxml,Apache Commons Scxml,我有一个带有“invoke”元素的scxml事件。调用事件时,此invoke元素更新数据模型元素。我如何使这种情况定期发生?是否可以定期调用此调用,例如,每秒调用一次?或者可能是每秒钟都要转到活动 后者的问题是,如果我在调用的finalize部分中放置一个转换,调用它自己,它似乎不会多次调用调用部分。我首先想提供一些关于的背景知识作为子级放置到。它在进入状态时启动子状态机会话,在退出状态时停止会话。此外,如果子会话进入状态,则在父会话上调度done.invoke.invokeid事件。您可以在父

我有一个带有“invoke”元素的scxml事件。调用事件时,此invoke元素更新数据模型元素。我如何使这种情况定期发生?是否可以定期调用此调用,例如,每秒调用一次?或者可能是每秒钟都要转到活动


后者的问题是,如果我在调用的finalize部分中放置一个转换,调用它自己,它似乎不会多次调用调用部分。

我首先想提供一些关于
的背景知识<代码>作为子级放置到
。它在进入状态时启动子状态机会话,在退出状态时停止会话。此外,如果子会话进入
状态,则在父会话上调度
done.invoke.invokeid
事件。您可以在父状态的转换中使用此
done.invoke.invokeid
事件,以在子会话终止时强制父状态退出。最后,父状态和子状态可以通过
相互通信。家长可以使用设置为
\u invoke\u invokeid
目标属性与孩子通信,孩子可以通过设置为
\u parent
目标属性与家长通信

现在,谈谈你的问题:

调用事件时,此invoke元素更新数据模型元素


我认为您概念化这个的方式可能有问题,因为被调用的会话有它自己的数据模型(也就是说,它自己的内存)。可以使用
绑定子会话的初始数据模型值,但不能在父会话和子会话之间真正共享内存。这意味着您不能在子会话中直接在父会话中更新数据模型,例如使用

我首先想提供一些关于
的背景知识<代码>
作为子级放置到
。它在进入状态时启动子状态机会话,在退出状态时停止会话。此外,如果子会话进入
状态,则在父会话上调度
done.invoke.invokeid
事件。您可以在父状态的转换中使用此
done.invoke.invokeid
事件,以在子会话终止时强制父状态退出。最后,父状态和子状态可以通过
相互通信。家长可以使用设置为
\u invoke\u invokeid
目标属性与孩子通信,孩子可以通过设置为
\u parent
目标属性与家长通信

现在,谈谈你的问题:

调用事件时,此invoke元素更新数据模型元素


我认为您概念化这个的方式可能有问题,因为被调用的会话有它自己的数据模型(也就是说,它自己的内存)。可以使用
绑定子会话的初始数据模型值,但不能在父会话和子会话之间真正共享内存。这意味着您不能在子会话中直接在父会话中更新数据模型,例如,

Wow这是一个详细的回复。谢谢,这对我来说真的很清楚。我说我在finalize中设置了一个转换,这是错误的。实际上,我所做的是引发了一个事件,触发了我人生的转变。非常感谢上面的代码,是什么引发了“更新”事件?另外,我相信我已经尝试过类似于上述的解决方案,但出于某种原因,调用只在第一次“迭代”时输入……Re:引发“更新”事件的原因。在调用的会话中,您可以将事件发送到父会话,如下所示:
@Joker请在SCION-SCXML聊天室中随时联系我:@Joker,或者您可以将问题与SCXML标记一起发布到stackoverflow这是一个详细的回复。谢谢,这对我来说真的很清楚。我说我在finalize中设置了一个转换,这是错误的。实际上,我所做的是引发了一个事件,触发了我人生的转变。非常感谢上面的代码,是什么引发了“更新”事件?另外,我相信我已经尝试过类似于上述的解决方案,但出于某种原因,调用只在第一次“迭代”时输入……Re:引发“更新”事件的原因。在调用的会话中,您会将事件发送到父会话,如下所示:
@Joker请在SCION-SCXML聊天室中随时联系我:@Joker,或者您可以将问题与SCXML标记一起发布到stackoverflow
<state id=invokeParent">
  <!-- this is some data that you want the child session to update in the parent session -->
  <datamodel>
    <data id="dataToUpdate" />
  </datamodel>
  <onentry>
    <send event="loop" delay="1s"/> <!-- send the 'loop' event every second to loop in invokeParent -->
  </onentry>
  <transition event="loop" target="invokeParent" /> <!-- this transition will exit and re-enter the state, restarting the invoked session -->
  <transition event="done.invoke.myInvoke" target="invokeParent" /> <!-- also loop if the invoked session terminates -->
  <invoke id="myInvoke" type="scxml" src="file:test276sub1.scxml"/> <!-- this is the invoke -->
  <!-- this targetless transition handles the update event sent from the child session to the parent to update the parent's datamodel -->
  <transition event="update">
    <assign location="dataToUpdate" expr="_event.dataToUpdate"/>
  </transition>
</state>