在 Ada 中等待任务

1 ada

我有一个包含任务的程序。在所有任务终止后,我必须做一些事情。我怎样才能做到这一点?

Sim*_*ght 7

在内部块中声明任务:直到所有任务完成,块才会退出,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;
Run Code Online (Sandbox Code Playgroud)


Mar*_*c C 5

在不了解您实际要完成的任务的情况下,完成此任务的一些尝试是:

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