Блок SelectOutput - PullRequest
       3

Блок SelectOutput

0 голосов
/ 07 февраля 2020

У меня есть очередь, из которой есть две задержки, которые я хочу получить. Я поместил между очередью и задержками блок SelectOutput, который я хочу, чтобы принудительное распределение элементов в очереди к двум задержкам. Более подробно, когда в очереди, например, четыре элемента, один направляется (вытягивается) в одну из задержек, другой (FIFO) - в другую задержку, когда задержка завершается, он вытягивает третий элемент и когда другая задержка заканчивается (или первый, если он быстрее), то тянет последний элемент.

Я пытался реализовать вышеизложенное двумя способами. Во-первых, я сделал выбор в пользу вероятности c (0,5). Другой способ, который я использовал, - это сделать условный выбор, что первая задержка будет выбрана, когда другая не пуста.

Однако, в любом случае, я наблюдаю, что в очереди может быть несколько элементов, задержка будет пустой, но не будет выбрана.

Почему блок задержки не вытягивает один из элементов?

Любые идеи о том, как я могу сделать элементы в go в зависимости от того, что задержка пуста?

Спасибо.

1 Ответ

0 голосов
/ 08 февраля 2020

Я изучил это, и я думаю, что нашел способ обойти. Вот оно: сразу после очереди, в которой находятся предметы, которые не вытащены, поместите два блока; одна задержка с очень небольшой (фиксированной) продолжительностью и блоком удержания. Эти два блока также находятся за блоком SelectOutput. Задержка, которая была вставлена, вытягивает элемент, и блок Hold не позволяет продолжить (т. Е. Ожидает его в состоянии «pu sh»), пока не будут выполнены соответствующие условия. Условия (удержания) состоят в том, что обе Задержки имеют размер ()> 0 (Delay1.size ()> 0 & Delay2.size ()> 0) (Примечание: обратите внимание на одиночное & в условии. если первое условие выполнено, то второе также проверяется). Он удерживает элемент до тех пор, пока задержка последующих элементов не станет пустой, и если это так, он позволяет элементу перейти к блоку SelectOutput. Затем блок SelectOutput направляет элемент в соответствии с условием: Delay1.size ()> 0. Теперь условие блока Hold необходимо пересматривать всякий раз, когда производятся относительные изменения его условий. Чтобы оставаться в безопасности, я произвел следующую проверку в действиях «Ввод при входе» и «При выходе» при включении «Задержка перед удержанием» и обеих последующих задержек (hold.recalculateConditions ();)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...