Ждите задач в Аде - PullRequest
       7

Ждите задач в Аде

1 голос
/ 11 декабря 2010

У меня есть процедура с заданиями в ней.Я должен сделать что-то после того, как все задачи завершены.Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 15 декабря 2010

Объявите задачи во внутреннем блоке: блок не выйдет, пока все задачи не будут выполнены, ARM7.6.1 (4)

with Ada.Text_IO; use Ada.Text_IO;
procedure After_Tasks is
begin
   Put_Line ("at the start");

   declare
      task T1;
      task T2;
      task body T1 is
      begin
         delay 1.0;
         Put_Line ("t1 done");
      end T1;
      task body T2 is
      begin
         delay 2.0;
         Put_Line ("t2 done");
      end T2;
   begin
      null;
   end;        -- block here until T1 & T2 are completed

   Put_Line ("at the end");
end After_Tasks;
4 голосов
/ 12 декабря 2010

Без какого-либо знания о том, чего вы на самом деле пытаетесь достичь, пара ударов при выполнении этого будет:

  • Отслеживать (опрашивать) атрибут 'Завершено каждой ожидающей задачи.
  • Реализовать запись "Завершение работы" в ваших задачах, которая является последней вещью, которую выполняет каждая задача. Сделайте ваше «контролирующее» рандеву с каждой записью «Завершение работы», и как только все задачи будут приняты и завершены, для всех намерений и целей вы можете сделать вывод, что все задачи завершены. Для педантичного среди нас, мы могли бы выполнить небольшую задержку (delay 0.0;) и затем проверить через атрибут «Прекращено», что все задачи завершены или, по крайней мере, pragma Assert().
...