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



         

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


loop

select

accept Service_1 [ параметры для Service_1 ] do

. . . end Service_1; or

. . . or

accept Service_N [ параметры для Service_N ] do

. . . end Service_N; else

. . . -- последовательность инструкций, которая выполняется -- если нет ни одного вызова рандеву end select

end loop;

Подобным образом последовательность инструкций, указанная в разделе else, может быть использована для организации "фоновой" работы задачи-сервера.

Еще одной разновидностью инструкции отбора служит инструкция отбора, использующая альтернативу таймаута (или задержки).

Такая инструкция отбора может иметь следующий вид:

loop

select

accept Service_1 [ параметры для Service_1 ] do

. . . end Service_1; or

. . . or

accept Service_N [ параметры для Service_N ] do

. . . end Service_N; or

delay 1.0; . . . -- последовательность инструкций таймаута, -- которая выполняется в случае -- когда нет ни одного вызова рандеву -- в течение одной секунды end select

end loop;

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

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

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

Таким образом, может быть указан относительный (как в примере выше) или абсолютный интервал времени.

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




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