Spec-Zone.ru › Ada 2005
Справочник по Ada 2005

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).

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

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

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

При выполнении timed_entry_call, имя_входа, имя_процедуры или префикс_процедуры, а также любые фактические параметры оцениваются, как и при простом вызове входа (см. 9.5.3) или вызове процедуры (см. 6.4). Время истечения (см. 9.6) для вызова определяется путем оценки выражения delay_expression альтернативы delay_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