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



         

Типы и объекты задач


Конструкция задачи обладает свойствами, которые характерны для пакетов, процедур и структур данных:

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

Вместо этого, задача должна быть помещена в другую структуру (например, пакет или процедуру)

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

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

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

    Спецификация задачи, начинающаяся зарезервированными словами task type, определяет тип задачи (или задачный тип). Значение объекта (переменная) типа задачи представляет собой задачу.

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

    Простым примером многозадачной программы может служить следующая программа:

    with Ada.Text_IO;

    procedure Multitasking_Demo is

    -- спецификация анонимной задачи task Anonimous_Task;

    -- тело анонимной задачи task body Anonimous_Task is

    begin -- для Anonimous_Task

    for Count in 1..5 loop

    Ada.Text_IO.Put_Line("Hello from Anonimous_Task"); end loop;

    end Anonimous_Task;

    -- спецификация типа задачи task type Simple_Task (Message: Character);

    -- тип задачи имеет тело task body Simple_Task is

    begin -- для Simple_Task

    for Count in 1..5 loop

    Ada.Text_IO.Put_Line("Hello from Simple_Task " & Message); end loop;

    end Simple_Task;

    -- переменная задачного типа Simple_Task_Variable: Simple_Task(Message => 'A');

    begin -- для Multitasking_Demo

    -- в отличие от процедур, задачи не вызываются, -- а активируются автоматически

    -- выполнение обоих задач начинается как только -- управление достигнет этой точки, то есть, сразу -- после "begin", но перед выполнением первой инструкции -- головной процедуры Multitasking_Demo

    null;

    end Multitasking_Demo;

    <


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