我有一个只有一个Stop条目和一个else部分的任务,我怎样才能实现任务在无限循环中的else部分执行操作但是当调用Stop时它已准备好终止
这是选择部分
select
accept Stop do
exit;
end Stop;
else
delay 3.0;
--do something
end select;
答案 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}} 已经开始。