Для того, чтобы Вы могли видеть что происходит, перед каждым выводом строки на экран будем делать секундную паузу. Чтобы сделать пример более интересным, добавим в запрос Start строку сообщения, которую нужно выводить, и количество выводимых сообщений.
Сначала нужно создать задачный тип, который мы назовем Babbler, и включим его в пакет Babble. Описание типа может выглядеть следующим образом:
При описании задачи описание входа в задачу (entry) в аналогично описанию процедуры. Описание входа в задачу указывает какие запросы к задаче можно делать и какую информацию принимает или возвращает задача при выполнениии запроса.
Точно также как пакеты и подпрограммы, задачи имеют описание и тело. Тело задачи может выглядеть следующим образом:
Тело задачи указывает, какие действия будет выполнять задача после запуска. Данная задача просто создает несколько локальных переменных и выполняет инструкцию "accept". Инструкция принятия (accept statement) обеспечивает ожидание выполнения другой задачей запроса к соответствующему входу. Когда другая задача выполняет соответствующий запрос, принимающая задача выполняет последовательность инструкций между ключевыми словами "do" и "end" инструкции принятия. Когда задача выполняет эти инструкции, принято говорить что она выполняет рандеву с другой задачей. Запрашивающая вход задача не выполняет никаких действий, пока не будет достигнут "end" в инструкции принятия. Часто во время рандеву принимающая задача копирует данные, переданные вызывающей задачей, для того, чтобы можно было использовать их позднее. Как только рандеву завершается, обе задачи продолжают свою работу.
Приведем короткую процедуру для демонстрации нашего задачного типа. Назовем процедуру Noise. В ней создаются две задачи данного задачного типа и каждой из них посылается запрос Start. Обратите внимание на то, как похоже создание задач на создание переменных обычного типа:
Процедура, описывающая экземпляр задачи, подобно процедуре Noise, называется главной процедурой. Главная процедура ожидает завершения всех созданных ею задач, прежде чем сама сможет завершить свою работу. Таким образом Noise перед завершением будет ждать завершения Babble_1 и Babble_2.
Обратите также внимание на то, что когда процедура Noise ``вызывает'' вход `Start' задач Babble_1 и Babble_2, происходит рандеву.
Будут ли перемешаны на экране текстовые строки, выведенные Babble_1 и Babble_2 после запуска Noise?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 13 |
---|
Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s13s2.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org