Событие, происходящее по истечении таймаута используется тогда, когда Вам нужно запланировать выполнение какого-то действия на определенный момент времени или дату, отстоящую на заданное количество времени (таймаут) от текущего момента.
Событие, происходящее по истечению таймаута предоставляет дополнительные возможности: Вы можете сделать такое событие циклическим, либо же вообще управлять этим событием "вручную". Это позволяет эффективно решать следующие задачи:

Другой (возможно, более наглядный) пример. Предположим, что в модели производства нужно выполнить какие-то действия в начале новой рабочей смены (в 8 часов утра). Такое поведение может быть легко реализовано с помощью циклического события. В этом случае, если единицами модельного времени в Вашей модели являются часы, то Вам нужно просто ввести 8 в поле Время первого срабатывания (абсолютное) и 24 в поле Период.
Циклическое событие может так же легко оперировать и с календарными датами. В этом случае Вам будет нужно задать календарную (модельную!) дату, когда Вы хотите, чтобы событие произошло в первый раз, и задать Период срабатывания этого события (здесь Вы можете использовать функции времени AnyLogic (second(), minute(), hour(), day(), week()), которые возвращают модельные времена, равные соответствующим единицам времени). Например, чтобы сделать событие еженедельным, введите в качестве значения периода week().
Если в Вашей модели
планируется сразу несколько одновременных и
независимых событий, выполняющих похожие действия, то мы рекомендуем
задавать их с помощью динамических
событий.
Чтобы задать сoбытие,
происходящее по истечении заданного таймаута
из
палитры Основная
на диаграмму класса активного объекта.
Обратите внимание, что здесь Вы
задаете абсолютноевремя,
и в том случае, если событие будет создано уже после указанного здесь
момента модельного времени, это событие не произойдет никогда.Циклический
– событие будет происходить циклически. С помощью приведенных ниже
элементов управления Вы можете задать Время первого срабатывания
(абсолютное)
и Период, с которым будет
срабатывать это событие. Вы можете задать время первого
срабатывания как модельную дату или как
количество единиц модельного времени, которое должно пройти с момента
запуска модели.
Обратите внимание, что здесь Вы задаете абсолютноевремя,
и в том случае, если событие будет создано уже после указанного
здесь времени первого срабатывания, модель запланирует первое
срабатывание этого события в прошлом и затем будет последовательно
увеличивать это значение на величину заданного для события периода.
Первое из полученных таким образом значений, которое будет больше
текущего значения модельного времени, будет принято в качестве
действительного времени первого срабатывания этого события. Следующее
срабатывание события будет запланировано, как и положено, путем
добавления к этому моменту заданного для события Периода.
Если Вы хотите использовать относительные
времена (т.e. отсчитывать время первого срабатывания от момента
создания этого события), используйте функцию time()
в поле Время первого срабатывания
(абсолютное). Здесь функция time()
будет возвращать модельное время создания этого события.
Если таймаут не меняется и известен заранее,
то Вы можете указать его в поле Таймаут.
Тогда Вы сможете просто вызывать метод myEvent.restart(),
не указывая таймаут с помощью аргумента этого метода.Имя – Имя события. Имя используется для идентификации события и доступа к нему из кода.
Отображать имя – Если опция выбрана, то имя события будет отображаться в графическом редакторе.
Исключить – Если опция выбрана, то событие будет исключено из модели.
На презентации – Если опция выбрана, то событие будет отображаться на презентации во время выполнения модели.
Действие – Java код, выполняемый при происхождении данного события.
Тип события – Тип события:
По таймауту – Событие происходит по истечению таймаута. Событие будет происходить согласно выбранному Режиму.
С заданной интенсивностью – Событие происходит с заданной интенсивностью (которая задается в поле Интенсивность)
При выполнении условия – Событие происходит при выполнении заданного условия (которое задается в поле Условие).
Режим – [Свойство отображается, только если Тип события - По таймауту] Выберите здесь режим события, срабатывающего по таймауту:Циклический
– Событие будет происходить периодически. Вы задаете Время первого срабатывания
(абсолютное)
и Период.
Время первого срабатывания может быть задано
как календарная дата (модельного времени!) или как число единиц
модельного времени, которое должно пройти от момента запуска модели.
Обратите внимание, что здесь Вы
оперируете абсолютным временем.
Если Вы хотите использовать относительные
времена
(т.e. отсчитывать время первого срабатывания от момента создания
события), то используйте функцию time()
в поле Время
первого срабатывания
(абсолютное). Функция time()
возвращает текущее значение модельного времени (в данном контексте она
будет возвращать время создания события).
Срабатывает
один раз
– Событие произойдет только один раз, в момент
времени, заданный в поле Время
срабатывания (абсолютное).
Время срабатывания может быть задано
как календарная дата (модельного времени!) или как число единиц
модельного времени, которое должно пройти от момента запуска
модели.
Обратите внимание, что
здесь Вы задаете абсолютное время,
и если это значение будет меньше текущего значения
модельного времени,
когда Вы создадите это событие, то такое событие никогда не произойдет.
Если
таймаут будет иметь
фиксированное (одно и то же) значение, то можно просто ввести это
значение в поле Таймаут
и вызывать метод myEvent.restart(),
без задания значения таймаута с помощью параметра метода. Интенсивность – [Свойство отображается, только если Тип события - С заданной интенсивностью] Интенсивность, с которой будет происходить данное событие. С математической точки зрения, событие будет происходить с таймаутом, вычисляемым согласно экспоненциальному закону распределения с параметром, равным заданному в этом поле значению. Т.e., если интенсивность равна 5, то событие будет происходить в среднем 5 раз в единицу модельного времени.
Условие – [Свойство отображается, только если Тип события - При выполнении условия] Условие, при выполнении которого произойдет данное событие.Таймаут – [Свойство отображается, только если Тип события - По таймауту и выбран Режим "Ручной"] Выражение, вычисляющее значение времени, которое должно пройти от момента планирования события пользователем (путем вызова метода restart() этого события) до происхождения этого события.
Время срабатывания (абсолютное) – [Свойство отображается, только если Тип события - По таймауту и выбран Режим Срабатывает один раз] Абсолютное время срабатывания события, заданное как календарная дата (модельного времени!) или как число единиц модельного времени, которое должно пройти от момента запуска модели.
Время первого срабатывания (абсолютное) – [Свойство отображается, только если Тип события - По таймауту и выбран Циклический Режим] Абсолютное время первого срабатывания циклического события, заданное как календарная дата (модельного времени!) или как число единиц модельного времени, которое должно пройти от момента запуска модели.
Период – [Свойство отображается, только если Тип события - По таймауту и выбран Циклический Режим] Период срабатывания циклического события.
Вы
можете программно
управлять событием этого типа с помощью соответствующего программного
интерфейса
void reset() - Отменяет запланированное событие (если в текущий момент это событие запланировано на какой-то момент в будущем). Если событие работает в Циклическом режиме, то цикл не возобновится до тех пор, пока не будет вызван метод restart() или restart(double t).
void restart() - Перезапускает событие (отменяет запланированное событие (если в текущий момент это событие запланировано на какой-то момент в будущем) и планирует его на другой момент времени согласно текущему значению Таймаута).
void
restart(double t)
- Перезапускает событие (отменяет запланированное событие
(если в текущий момент это событие запланировано на какой-то момент в
будущем) и планирует его через заданный таймаут t). Если событие циклическое, то в дальнейшем
оно продолжит планироваться согласно изначально заданному таймауту.
Параметр: t - время (от текущего момента), на
которое будет запланировано событие.
void suspend() - Приостанавливает событие (отменяет запланированное событие (если в текущий момент это событие запланировано на какой-то момент в будущем) и запоминает время, оставшееся до его происхождения, для того, чтобы впоследствии Вы могли возобновить его выполнение путем вызова метода resume()). Если же на момент вызова метода suspend() это событие не запланировано, то при последующем вызове метода resume() ничего не произойдет. Обратите внимание, что Вы не должны вызывать метод suspend() (т.e. не должны пытаться приостановить событие) в коде действия этого события: в этом случае будет происходить то же, что и при вызове метода reset().
void resume()- Возобновляет выполнение ранее приостановленного события (в качестве таймаута такого события будет установлено время, оставшееся до его происхождения на момент приостановки этого события). Не выполняет ничего, если событие не было приостановлено или уже было отменено или запущено после его последней остановки.
double getRest() - Возвращает время, оставшееся до запланированного происхождения события или Double.POSITIVE_INFINITY, если событие в данный момент времени не запланировано.
Событие,
происходящее с заданной интенсивностью