我有一个队列,我要从中延迟两个项目。我在队列和延迟之间放置了一个SelectOutput块,我想强制将队列中的项目交替分配给两个延迟。更详细地讲,例如队列中的四个项目,一个被引导(拉入)其中一个延迟,另一个(FIFO)指向另一个延迟,延迟完成时拉第三项,另一个延迟结束时(或第一个延迟,如果延迟速度更快),然后提取最后一项。
我已经尝试通过两种方式实现上述目标。首先,我将选择概率设为(0.5)。我使用的另一种方法是进行条件选择,即当另一个不为空时选择第一个延迟。
但是,无论哪种方式,我都观察到队列中可能有许多项目,延迟为空但未被选择。
为什么延迟块不拉入其中一项?
关于如何使物品进入延迟为空的任何想法?
谢谢。
我调查了一下,我想找到了解决方法。它去了:在存放未拉出物品的队列之后,放置两个块;一个延时,持续时间非常短(固定),并且具有保持块。这两个块也位于SelectOutput块的后面。插入的Delay会拉入一个项目,并且Hold块在满足其中的条件之前不会继续进行(即,它处于“推”状态等待)。 (保持)条件是,随后的两个Delay都具有size()> 0(Delay1.size()> 0&Delay2.size()> 0)(注意:请注意条件中的单个&,请确保如果满足第一个条件,则还检查第二个条件。这将保留该项目,直到“随后的延迟”为空为止;如果为true,则使该项目继续进行SelectOutput块。然后,SelectOutput块根据以下条件引导项目:Delay1.size()> 0。现在,只要条件发生了相对变化,就需要重新评估Hold块条件。为了安全起见,我对保持之前的Delay的On enter和On exit操作以及随后的两个Delay进行了以下检查(hold.recalculateConditions();)