Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ada中等待任务_Ada - Fatal编程技术网

在Ada中等待任务

在Ada中等待任务,ada,Ada,我有一个包含任务的过程。 在所有任务结束后,我必须做一些事情。 我怎样才能做到这一点呢?在不知道您实际想要完成什么的情况下,尝试几次就可以做到: 监视(轮询)每个挂起任务的属性 在任务中执行“关机”条目,这是每个任务执行的最后一件事。让您的“控制器”与每个任务的关机条目会合,一旦所有任务都接受并完成会合,出于所有目的,您可以得出任务都已终止的结论。对于我们当中的学究,我们可能会执行一个短延迟(delay 0.0;),然后通过“Terminated”属性验证所有任务是否已终止,或者至少是prag

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

在不知道您实际想要完成什么的情况下,尝试几次就可以做到:

  • 监视(轮询)每个挂起任务的属性
  • 在任务中执行“关机”条目,这是每个任务执行的最后一件事。让您的“控制器”与每个任务的关机条目会合,一旦所有任务都接受并完成会合,出于所有目的,您可以得出任务都已终止的结论。对于我们当中的学究,我们可能会执行一个短延迟(
    delay 0.0;
    ),然后通过“Terminated”属性验证所有任务是否已终止,或者至少是
    pragma Assert()
    so

在不知道您实际想要完成什么的情况下,尝试几次来实现这一点:

  • 监视(轮询)每个挂起任务的属性
  • 在任务中执行“关机”条目,这是每个任务执行的最后一件事。让您的“控制器”与每个任务的关机条目会合,一旦所有任务都接受并完成会合,出于所有目的,您可以得出任务都已终止的结论。对于我们当中的学究,我们可能会执行一个短延迟(
    delay 0.0;
    ),然后通过“Terminated”属性验证所有任务是否已终止,或者至少是
    pragma Assert()
    so

    • 在内部块中声明任务:在所有任务完成之前,块不会退出


      在内部块中声明任务:在所有任务完成之前,块不会退出


      这个问题的本质表明,您最好提供更多关于您试图实现的功能的信息,而不是询问如何实现这个特定的功能。原因是,你所问的问题通常不是Ada程序员会处理的问题。这个问题的本质表明,你最好提供更多关于你试图实现什么功能的信息,而不是询问如何做这个特定的事情。原因是,您所问的问题通常不是Ada程序员会处理的问题。这也是我的建议。但是,我可能只是在调用过程之后将“末尾”代码放在过程的调用代码中。声明块在我看来总是像一个黑客。这也是我的建议。但是,我可能只是在调用过程之后将“末尾”代码放在过程的调用代码中。声明块在我看来总是像个黑客。
      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;