我在Ada中创建了以下任务,我希望它包含一个告诉我缓冲区计数的过程。我怎么能这样做?
package body Buffer is
task body Buffer is
size: constant := 10000; -- buffer capacity
buf: array(1.. size) of Types.Item;
count: integer range 0..size := 0;
in_index,out_index:integer range 1..size := 1;
begin
procedure getCount(currentCount: out Integer) is
begin
currentCount := count;
end getCount;
loop
select
when count<size =>
accept put(item: in Types.Item) do
buf(in_index) := item;
end put;
in_index := in_index mod size+1;
count := count + 1;
or
when count>0 =>
accept get(item:out Types.Item) do
item := buf(out_index);
end get;
out_index := out_index mod size+1;
count := count - 1;
or
terminate;
end select;
end loop;
end Buffer;
end Buffer;
编译此代码时出现错误
声明必须在“开始”
之前
指的是getCount
程序的定义。
答案 0 :(得分:6)
当前的问题是你指定了一个subprogram body ,而没有先在处理的语句序列中指定相应的subprogram declaration 部分你的task body。它应该放在声明部分中,如图here所示。
更大的问题似乎是创建一个有界缓冲区,protected type似乎更合适。可以在§II.9 Protected Types和§9.1 Protected Types中找到示例。在protected type Bounded_Buffer
中,您可以添加
function Get_Count return Integer;
拥有这样的身体:
function Get_Count return Integer is
begin
return Count;
end Get_Count;
答案 1 :(得分:6)
声明必须在“开始”之前,并且您的“getCount”声明跟随“开始”。重新安置:
procedure getCount(currentCount: out Integer) is
begin
currentCount := count;
end getCount;
begin
但实际上,请注意trashgod的建议。