Доброго дня!
Вообщем у меня такая проблема, в условиях задержки блока
"HOLD" пишу, что если var1== false, то блокируй,
при первом прохождении значение var1=true, а при попадание в
"Delay" в событии onEnter : var1=false, тоесть должно выполняться
условие задержки, а оно не выполняются. Что не так? Может кто
знает?
Алексей — 21.01.08
Вместо var1=false написать прямо в событии onEnter блока Delay : hold.block()
(естественно, вместо hold имя блока).
Виктор Глейм — 22.01.08
to Andrey:
Значение параметра 'initiallyBlocked' вычисляется один раз, при создании
блока, и в дальнейшем не изменяется. Поэтому, как верно заметил
Алексей, нужно использовать метод block.
Andrey — 22.01.08
У меня следующая реализация блоков:
Source->Queue2->Delay->Queue1->Hold->Split(разделяет на два потока->Delay1 и
->Delay2)->Sink
Вообщем, если указывать Queue1.block() на OnExit, то выводится следующая
ошибка:
root.delay.output:entity was unable to leave immediately (time spent = 20.4301203232)
A buffering object is probably needed, or capacity of the existing object needs to be increased.
Моя задача состоит в том, что когда один из блоков Delay1 или Delay2
занят, то задания накапливаются в
Queue1, а когда свободны, то поступают по цепи не задерживаясь. Каким
образом можно реализовать данную задачу? Спасибо!
Andrey — 22.01.08
Если с тавлю условие в Queue1 на событии OnExit if(var1==false)queue1.block();, то
очередь не блокируется.
То же получается при установке события OnEnter...
Не могу понять почему...?
Алексей — 23.01.08
Андрей, блокировать нужно не Queue, а блок Hold.
Если Вы пишете queue1.block(), то блокируется входной порт очереди, т.е.
ни одна заявка
не можеть поступить в ОЧЕРЕДЬ.
Вам нужно написать в событии OnEnter блока Queue1 Hold.block() а не queue1.block().
Andrey — 23.01.08
Да мне хоть, что-нибудь заблокировать...
Я пишу в событии OnEnter блока Queue1 if(var1==false) hold.block(); (блок hold,
именуется hold), но ничего не происходит, заявки проскакивают, а
потом выдаётся ошибка. Что делаю не так?
Алексей — 24.01.08
Андрей, попробуй не использовать переменную var1 и сделать
следующее:
1) в событии OnExit блока Queue1 написать hold.block()
2) в событии OnExit блока Delay1 написать if (Delay2.size() == 0) hold.unblock();
3) в событии OnExit блока Delay2 написать if (Delay1.size() == 0) hold.unblock();
Попробуй, вроде работает ....
Andrey — 30.01.08
Спасибо, Алексей!!!
Да, действительно в данном случае все работает.
Может подскажешь, почему в "Оптимизационном эксперементе "
не вставляются параметры?
Виктор Глейм — 31.01.08
Андрей, параметры можно выбрать из выпадающего списка. Но для
этого сами параметры должны присутствовать в корневом активном
объекте модели.