Извлекает поступающих в блок агентов из процесса, заданного потоковой диаграммой, позволяя пользователю самому решить, что следует сделать с этими агентами.
Если вам нужно просто уничтожить агентов — используйте блок Sink. Обычно блок Exit используется либо для перемещения агентов в часть модели, реализованную с помощью какого-то другого стиля моделирования (например, в диаграмму состояний или функцию), либо, в связке с блоком Enter, для реализации сложной маршрутизации агентов между различными частями потоковой диаграммы, описывающей процесс. Вы можете осуществлять любые действия с агентом в коде параметра onExit.
Нестандартный блок. Предположим, вы хотите создать блок с функциональностью, не покрытой ни одним блоком Библиотеки Моделирования Процессов, чтобы иметь возможность добавлять его требуемое количество раз в потоковую диаграмму, описывающую ваш процесс. В этом случае вы можете создать новый тип агента, добавить в этот тип два порта (скажем, in и out), соединить первый (входной) порт с блоком Exit, а второй — с блоком Enter, и использовать любые конструкции языка моделирования "между" этими блоками, см. картинку ниже. Чтобы направить входящего агента в часть блока, реализующую нестандартное поведение, используйте параметр onExit блока Exit, в коде которого агент доступен как agent; чтобы вернуть его в потоковую диаграмму через выходной порт out, вызовите функцию enter.take(agent ).
Сложная маршрутизация. Предположим, вы хотите реализовать маршрутизацию агентов, перенаправляя их по одному из нескольких возможных путей в зависимости от выполнения каких-то глобальных условий(например, вы хотите выбирать пункт обслуживания с наименьшей очередью). Это можно сделать с помощью нескольких блоков SelectOutput, но в случае большого числа таких пунктов это решение перестанет быть элегантным, а в случае реплицированного принимающего блока — так и вовсе станет неприменимым. Решить эту проблему можно, используя блок Exit у передающей стороны и блок Enter — у принимающей, анализируя по прибытии каждого агента заданные условия и вызывая функцию take(agent) того блока Enter, который будет выбран. Обратите внимание, что такая маршрутизация может пересекать границы агента: вы можете вызывать функции типа receiver(i).enter.take(agent) для пересылки агента в i-й экземпляр принимающего блока.
- При выходе
- Код, выполняемый, когда агент покидает блок.
Локальная переменная: T agent — агент
Функция | Описание |
---|---|
long count() | Возвращает количество агентов, проходящих через этот блок. |
- in
- Входной порт.
-
Как мы можем улучшить эту статью?
-