Exit


Извлекает поступающих в объект агентов из процесса, заданного потоковой диаграммой, позволяя пользователю самому решить, что следует сделать с этими агентами.

Если вам нужно просто уничтожить агентов - используйте объект 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
Входной порт.