我正在寻找一种选择多个条目的方法。我已完成以下任务并选择阻止。目的是在其他地方运行多个(2)任务,运行直到一个完成,或在一段时间后超时
task type t_startup_task is
entry start;
entry started;
end t_startup_task;
task body t_startup_task is
startup_sig : Boolean := False;
begin
accept start;
busy : loop -- wait for external flag to become true
status.read_signal (startup_sig);
if startup_sig then
exit busy;
end if;
delay 0.1;
end loop busy;
accept started;
end t_startup_task;
<...>
startup_task.start;
select
startup_task.started;
or
state.wait_done; -- other entry
abort startup_task;
return False;
or
delay 4.0;
end select;
但是,这会导致以下编译错误:
only allowed alternative in timed entry call is delay
"or" not allowed here
实际执行此操作的最佳方法是什么?
答案 0 :(得分:3)
很遗憾,您无法使用pandas.DataFrame
语句来决定多个条目调用。但是,您可以使用它们来决定接受条目,因此具有三个任务的实现应该有效。
您仍然可以通过在最终通话中使用输出参数获得返回值。
select
注意,我没有测试或编译过这段代码,但它应该给出一个解决方案的想法。
答案 1 :(得分:0)
从技术上讲,语言允许这样:
select
delay 4.0;
...
then abort
select
Entry1;
...
then abort
Entry2;
...
end select;
end select;
可能会做你想要的。但是,最好的方法可能是使用受保护对象检入任务,并等待PO的条目:
protected Multi_Wait is
procedure Task1_Ready;
procedure Task2_Ready;
entry Wait_For_Either (Task_1 : out Boolean; Task_2 : out Boolean);
private -- Multi_Wait
Task1 : Boolean := False;
Task2 : Boolean := False;
end Multi_Wait;
然后你的代码就可以了
select
Multi_Wait.Wait_For_Either (Task_1 => Task_1, Task_2 => Task_2);
if not Task_1 and Task_2 then
abort T1;
return False;
end if;
or
delay 4.0;
end select;
您的任务会调用相应的过程,而不是等待第二次来电。