Иногда Вам может понадобиться программно управлять выполнением Вашей модели. Например, приостановить ее выполнение при происхождении какого-либо события и возобновить выполнение при срабатывании определенного перехода диаграммы состояний. Или же Вам может понадобиться возможность запуска модели по нажатию на Вашу собственную кнопку. AnyLogic предоставляет полнофункциональный API, позволяющий решать любые задачи, связанные с управлением выполнением модели.
Приведенная ниже таблица перечисляет методы исполняющего модуля и аналогичные им методы активного объекта, с помощью которых Вы можете программно управлять выполнением модели.
Чтобы вызвать функцию исполняющего модуля, напишите, например, getEngine().finish() в соответствующем месте кода Вашей модели.
Или же Вы можете вызвать аналогичную функцию finishSimulation() из любой активности активного объекта Вашей модели.
|
Функция исполняющего модуля |
Функция активного объекта |
Краткое описание |
Полное описание |
| boolean start() | нет | Запускает модель (если она еще не была запущена) и приостанавливает ее выполнение. |
Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии IDLE (в других состояниях не делает ничего, просто возвращает false). Метод выполняет следующее: 1. Устанавливает время запуска модели. |
|
boolean pause() |
boolean pauseSimulation() |
Приостанавливает запущенную модель. Переводит исполняющий модуль в состояние PAUSED после завершения выполнения текущего события. |
Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии RUNNING (в других состояниях не делает ничего, просто возвращает false). Переводит исполняющий модуль в состояние PLEASE_WAIT и затем выставляет флаг, который при проверке исполняющим модулем, вынуждает его завершить выполнение после завершения выполнения текущего события. Дальнейшее поведение зависит от контекста, из которого был вызван этот метод:
Обратите внимание, что ко времени завершения работы этого
метода исполняющий модуль может находиться в состоянии PAUSED, FINISHED
или ERROR. |
| boolean run() | boolean runSimulation() | Запускает приостановленную модель. Переводит исполняющий модуль в состояние RUNNING и затем возобновляет выполнение модели. |
Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии PAUSED (в других состояниях не делает ничего, просто возвращает false). Переводит исполняющий модуль в состояние RUNNING и затем запускает модель в отдельном потоке. Выполнение может быть прервано в результате одного из следующих событий: - больше нет событий, которые нужно выполнить (состояние -> FINISHED) - достигнуто конечное время stopTime (состояние -> FINISHED) - был вызван метод pause() (состояние -> PAUSED) - корневой активный объект был уничтожен (состояние -> FINISHED) - во время выполнения события или уничтожения активного объекта произошло исключение (состояние -> ERROR) Этот метод не должен вызываться из потока выполнения модели! Обратите внимание, что ко времени завершения работы этого метода исполняющий модуль может находиться в состоянии PAUSED, FINISHED или ERROR. Возвращает: |
|
boolean stop() |
boolean stopSimulation() |
Останавливает выполнение модели затем уничтожает ее и "забывает" о ней, переводя исполняющий модуль в состояние IDLE. |
Команда исполняющего модуля, выполняемая только в том случае, если модуль не находится в состоянии IDLE (в состоянии IDLE не делает ничего, просто возвращает false). Если модуль находится в состоянии RUNNING, то устанавливает флаг, который при проверке потоком выполнения модели, вынуждает исполняющий модуль завершить выполнение модели. Дальнейшее поведение зависит от контекста, из которого вызван этот метод:
|
|
boolean finish() |
boolean finishSimulation() |
Завершает выполнение запущенной или приостановленной модели. В отличие от метода stop() модель при этом не уничтожается, и Вы можете анализировать ее состояние. |
Команда исполняющего модуля, выполняемая только в том случае, если модуль находится в состоянии RUNNING или PAUSED (в других состояниях не делает ничего, просто возвращает false). Устанавливает флаг, который при проверке исполняющим модулем, вынуждает его завершить выполнение после завершения выполнения текущего события. Дальнейшее поведение зависит от контекста, из которого вызван этот метод:
Обратите внимание, что ко времени завершения работы этого метода
исполняющий модуль может находиться в состоянии FINISHED или
ERROR. |
|
boolean runFast() |
нет |
Запускает модель самым быстрым из возможных способов из текущего потока. Запуск производится в режиме виртуального времени безотносительно заданных настроек.
|
Запускает модель самым быстрым из возможных способов из текущего потока. Запуск производится в режиме виртуального времени безотносительно заданных настроек. Метод завершает свое выполнение в результате одного из следующих событий: - недопустимое состояние исполняющего модуля в момент вызова метода (возвращает false, во всех остальных случаях возвращает true) - больше нет ни одного события/уравнения, которые нужно выполнить/решить (state -> FINISHED) - был вызван метод pause() (состояние -> PAUSED) - был вызван метод finish() (состояние -> FINISHED) - достигнуто конечное время stopTime (состояние -> FINISHED) - корневой активный объект был уничтожен (состояние -> FINISHED) - во время выполнения события или уничтожения активного объекта произошло исключение (состояние -> ERROR) Во время быстрого запуска модель защищена от чтения и записи, так что Вы не должны пытаться отображать презентации активных объектов илипараллельно выполнять какие-либо действия, целью которых является доступ к модели. Возвращает: |
|
boolean step() |
нет |
Выполняет не более одного дискретного шага модели (шаг может быть выполнен только из состояния паузы PAUSED). |
Выполняет не более одного дискретного шага модели (шаг может быть выполнен только из состояния паузы PAUSED). Обратите внимание, что ко времени завершения работы этого метода исполняющий модуль может находиться в состоянии PAUSED, FINISHED или ERROR. Этот метод не должен вызываться из потока выполнения модели! |
|
int getState() |
нет |
Возвращает текущее состояние исполняющего модуля (IDLE, PAUSED, RUNNING, STEP, FINISHED или ERROR). |
Возвращает текущее состояние исполняющего модуля: IDLE - не выполняется ни одна из моделей, ничего не происходит PAUSED - модель была выбрана и уже запущена, а в данный момент готова к продолжению выполнения или к выполнению шага RUNNING - находится в цикле выполнения модели, вызванного методом run() или runFast() FINISHED - выполнение модели успешно завершено, но модель еще не уничтожена ERROR - выполнение модели завершено с ошибкой, но модель еще не уничтожена PLEASE_WAIT - находится в процессе выполнения непрерываемой команды, такой, как pause(), step() или stop() Обратите внимание, что актуальность возвращаемого состояния не гарантируется, поскольку оно может быть изменено из параллельного потока. |