在Ada中等待任务
我有一个包含任务的过程。 在所有任务结束后,我必须做一些事情。在Ada中等待任务,ada,Ada,我有一个包含任务的过程。 在所有任务结束后,我必须做一些事情。 我怎样才能做到这一点呢?在不知道您实际想要完成什么的情况下,尝试几次就可以做到: 监视(轮询)每个挂起任务的属性 在任务中执行“关机”条目,这是每个任务执行的最后一件事。让您的“控制器”与每个任务的关机条目会合,一旦所有任务都接受并完成会合,出于所有目的,您可以得出任务都已终止的结论。对于我们当中的学究,我们可能会执行一个短延迟(delay 0.0;),然后通过“Terminated”属性验证所有任务是否已终止,或者至少是prag
我怎样才能做到这一点呢?在不知道您实际想要完成什么的情况下,尝试几次就可以做到:
- 监视(轮询)每个挂起任务的属性
- 在任务中执行“关机”条目,这是每个任务执行的最后一件事。让您的“控制器”与每个任务的关机条目会合,一旦所有任务都接受并完成会合,出于所有目的,您可以得出任务都已终止的结论。对于我们当中的学究,我们可能会执行一个短延迟(
),然后通过“Terminated”属性验证所有任务是否已终止,或者至少是delay 0.0;
sopragma Assert()
- 监视(轮询)每个挂起任务的属性
- 在任务中执行“关机”条目,这是每个任务执行的最后一件事。让您的“控制器”与每个任务的关机条目会合,一旦所有任务都接受并完成会合,出于所有目的,您可以得出任务都已终止的结论。对于我们当中的学究,我们可能会执行一个短延迟(
),然后通过“Terminated”属性验证所有任务是否已终止,或者至少是delay 0.0;
sopragma Assert()
- 在内部块中声明任务:在所有任务完成之前,块不会退出
在内部块中声明任务:在所有任务完成之前,块不会退出
这个问题的本质表明,您最好提供更多关于您试图实现的功能的信息,而不是询问如何实现这个特定的功能。原因是,你所问的问题通常不是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;