Ада-95. Компилятор GNAT



         

Селекция принятия рандеву - часть 5


В одной инструкции отбора, допускается наличие более одной альтернативы таймаута.

При этом, будет обрабатываться та альтернатива таймаута, которая имеет наименьший интервал времени.

Отметим также, что в пределах одной инструкции отбора не допускается совместное использование различных альтернатив таймаута для которых одновременно заданы относительные и абсолютные интервалы времени.

При применении инструкций отбора следует учитывать, что использование альтернативы завершения работы задачи (terminate), альтернативы таймаута (delay) и раздела else

в пределах одной инструкции отбора является взаимно исключающим.

Кроме того, любой вариант инструкции отбора обязан содержать хотя бы одну альтернативу выбора, в которой указана инструкция принятия рандеву accept.

Еще одной особенностью инструкций отбора является опциональная возможность указания дополнительной проверки какого-либо условия для альтернатив принятия рандеву, завершения работы задачи и таймаута.

Для указания такой проверки используется конструкция вида: "when условие =>", - где проверяемое условие описывается с помощью логического выражения, результат вычисления которого должен иметь значение предопределенного логического типа Standard.Boolean.

Как правило, такую проверку назвают защитной или охранной (guard), а ее использование может иметь следующий вид:

declare

. . . Service_1_Counter : Integer; . . . Service_N_Counter : Integer; . . . begin

. . . loop

. . . select

when (Service_1_Counter > 0) => accept Service_1 [ параметры для Service_1 ] do

. . . end Service_1; or

. . . or

when (Service_N_Counter > 100) => accept Service_N [ параметры для Service_N ] do

. . . end Service_N; end select

end loop; . . . end;

Вычисление значения логического выражения осуществляется в начале выполнения инструкции отбора.

Если результат вычисления выражения True, то соответствующая альтернатива имеет право быть выбранной инструкцией отбора, если результат False, альтернатива выбрана не будет, причем даже в том случае, когда какая-либо задача-клиент осуществила вызов соответствующего входа и ждет обслуживания.

Следует также учесть, что в случае, когда проверки условий используются для всех альтернатив инструкции отбора, и результаты проверок всех условий имеют значение False, это приведет к возбуждению исключения Program_Error.

Альтернативу отбора можно назвать открытой, когда для нее не указана дополнительная проверка условия или когда значение результата проверки условия есть True.

В противном случае альтернативу отбора можно назвать закрытой.




Содержание  Назад  Вперед