Ada把任务准备好从入口点终止

时间:2018-04-25 17:47:41

标签: ada

我有一个只有一个Stop条目和一个else部分的任务,我怎样才能实现任务在无限循环中的else部分执行操作但是当调用Stop时它已准备好终止

这是选择部分

select  
  accept Stop do  
    exit;  
  end Stop;  
else  
  delay 3.0;  
  --do something
end select;

1 个答案:

答案 0 :(得分:1)

这样做(为了清楚起见,添加了假定的循环语句):

loop
   select
      accept Stop;
      exit;
   or
      delay 3.0;
      --  do something
   end select;
end loop;

请注意,只有在需要处理其参数时才需要accept语句的正文。由于Stop没有,因此accept语句没有任何意义。

您的错误来自LRM, 5.7

中的此规则
  

如果此构造本身由给定的loop_statement包围,则应用于给定loop_statement的exit_statement不应出现在body或accept_statement中。

我还将 else 更改为 or ,以便在整个等待时间内接受Stop,我认为是你想要的。使用 else 时,Stop仅在 select 执行时接受,而不是在 {之后{1}} 已经开始。