在Ada等待任务

时间:2010-12-10 21:29:53

标签: ada

我有一个包含任务的程序。 在所有任务终止后我必须做点什么。 我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

在不知道你真正要完成什么的情况下,有几个人想要完成这个任务:

  • 监控(轮询)每个待处理任务的'Terminated属性。
  • 在您的任务中实施“关闭”条目,这是每项任务执行的最后一项。让您的“控制器”与每个任务的关闭条目会合,并且一旦所有任务都接受并完成了集合,所有意图和目的都可以得出结论,任务已全部终止。对于我们中的迂腐者,我们可能会执行一个短暂的延迟(delay 0.0;),然后通过'已终止属性验证所有任务已终止,或至少pragma Assert()如此。

答案 1 :(得分:4)

在内部块中声明任务:在完成所有任务之前,块不会退出,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;