Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

9.7.2 Вызовы входов с таймером

Вызов timed_entry_call выполняет вызов входа, который отменяется, если вызов (или переупорядочение с отменённым вызовом) не выбран до истечения времени. Вызов процедуры может появиться вместо вызова входа в случаях, когда процедура может быть реализована входом.

Синтаксис

timed_entry_call ::=
select
entry_call_alternative
or
delay_alternative
end select;
entry_call_alternative ::=
procedure_or_entry_call [последовательность_выражений]
procedure_or_entry_call ::=
выражение_вызова_процедуры | выражение_вызова_входа

Правила допустимости

Если используется выражение_вызова_процедуры для procedure_or_entry_call, имя _процедуры_ или префикс _процедуры_ имени в выражении_вызова_процедуры должно статически обозначать вход, переименованный как процедура, или (вид) примитивной подпрограммы ограниченного интерфейса, первым параметром которой является управляющий параметр (см. 3.9.2).

Динамическая семантика

Для выполнения timed_entry_call имя _входа_, имя _процедуры_ или префикс _процедуры_, а также все фактические параметры вычисляются, как и для простого вызова входа (см. 9.5.3) или вызова процедуры (см. 6.4). Время истечения (см. 9.6) для вызова определяется путём вычисления выражения _задержки_ в delay_alternative. Если вызов является вызовом входа или вызовом процедуры, реализованной входом, то вызов входа выполняется. В противном случае вызов выполняется, как описано в 6.4 для вызова процедуры, за которым следует последовательность_выражений entry_call_alternative; последовательность_выражений delay_alternative игнорируется.
Если вызов помещён в очередь (включая из-за отмены переупорядочения) и не выбран до истечения времени, то делается попытка отменить вызов. Если вызов завершается из-за отмены, то выполняется необязательная последовательность_выражений delay_alternative. Если вызов входа завершается успешно, выполняется необязательная последовательность_выражений entry_call_alternative.

Примеры

Пример вызова входа с таймером:
select
Controller.Request(Medium)(Some_Item);
or
delay 45.0;
-- контроллер слишком занят, попробуем что-то другое
end select;


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API