【发布时间】:2019-02-17 03:32:39
【问题描述】:
考虑显示对同一过程的三个不同调用的附加代码。它编译得很好,但在执行时挂起。我怀疑是某种锁,但我不明白为什么。
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Exceptions; use Ada.Exceptions;
procedure Main is
type A_Proc is access protected procedure (B: in out Integer);
protected Obj is
procedure Inc (B: in out Integer);
procedure Test (B: in out Integer);
end Obj;
protected body Obj is
procedure Inc (B: in out Integer) is
begin
B:=B+1;
end Inc;
procedure Test (B: in out Integer) is
Proc : A_Proc:=Inc'Access;
begin
Proc.all (B);
end Test;
end Obj;
B : Integer:=1;
Proc : A_Proc:=Obj.Inc'Access;
begin
Put_Line(B'Image);
Obj.Inc (B);
Put_Line(B'Image);
Proc.all (B);
Put_Line(B'Image);
Obj.Test (B);
Put_Line(B'Image);
Put_Line("The End");
end Main;
【问题讨论】:
-
它在我编译和运行它时工作。您使用的是什么版本的工具?
-
更重要的是,我想,@JimRogers,你使用的是什么版本?
-
我知道在您的其他问题之一中,您正在处理字符串到过程调用的映射。如果那是您仍然感兴趣的东西,您想知道如何将这个示例转换为可以使用字符串调用过程的东西吗?西蒙已经回答了“为什么”,所以我基本上是在问,如果你想要这样的东西,更新你的问题以反映你可能想要什么样的解决方案来解决这个问题。我有一些想法,但它们取决于您的实际要求。
-
我正在使用 x86_64-pc-mingw32 GNAT Community 2018 (20180523-73) 上托管的 GPS 2018 (20180523)
-
@JimRogers,在 Debian 拉伸上使用相同(但日期为 ..0525)的编译器,它在打印“3”行后挂起
标签: ada