如何在ada中运行两个过程

时间:2015-02-20 15:27:28

标签: ada

我有一个ada程序,它有一个主程序,现在我想添加另一个程序但是我收到一个错误,说“文件结束了,文件只能有一个编译单元”。我做了一些看起来我认为这是因为你每个文件只能有1个程序。我是否必须创建另一个文件并将该过程单独放入其中?如果是这样,我将如何编译这两个代码并运行它?有人可以告诉我如何编译并运行整个文件。

3 个答案:

答案 0 :(得分:0)

正如编译器所说,每个文件只能有一个编译单元。主程序是编译单元,这是一个程序。

如果你想让一个程序运行两个程序,这两个程序都是编译单元,你可以这样做:

with One_Procedure,
     Another_Procedure;
procedure Sequential is
begin
   One_Procedure;
   Another_Procedure;
end Sequential;

如果要并行运行这两个过程,请执行以下操作:

with One_Procedure,
     Another_Procedure;
procedure Parallel is
   task One;
   task Another;

   task body One is
   begin
      One_Procedure;
   end One;

   task body Another is
   begin
      Another_Procedure;
   end Another;
begin
   null;
end Parallel;

程序当然也可以在主程序的声明区域或某些包中声明。

答案 1 :(得分:0)

最近的GNAT和GPRbuild都有选项来指示您要编译的文件的哪些单元:-gnateINNNgcc-eInngprbuild,为{{ 3}}

另一种选择是熟悉gnatchop从文件中提取编译单元,并使用-m进行最少的重新编译;后者因为在编辑没有“语义上”触及文件中的所有编译单元时运行gnatchop,因此无法编译世界。 GNAT然后忽略时间戳。我有时会运行像

这样的命令
gnatchop -r -w -c allofit.ada && gnatmake -Ptest -m someunit.adb

为文件someunit.adb中包含的编译单元Someunit(过程,包)生成allofit.ada

答案 2 :(得分:0)

您可以在主程序中有1个主程序但有几个程序。

procedure main is
    ...text...

    procedure sub1 () is
    begin
        ...text...
    end sub1;

    procedure sub2 () is
    begin
        ...text...
    end sub2;

    ...text...
end main;