Ada 83(仅限)如何结束具有多个程序的整个程序

时间:2014-04-19 22:29:46

标签: ada

我正在使用Ada83(这是使用此版本的课程要求),我正在使用多个程序。我不知道如何走出整个计划。像C程序中的Exit一样关闭整个程序。从哪个地方调出出口?

2 个答案:

答案 0 :(得分:3)

如果您的程序不使用任务,您可以定义一个异常,表示紧急退出&#34 ;;也许在一些包装中:

package Emergency is
    Emergency_Exit : exception;
end Emergency;

在您的主程序中,捕获此异常:

procedure Your_Main_Procedure is
begin 
    ... whatever the main procedure does
exception
    when Emergency.Emergency_Exit =>
        null;
end Your_Main_Procedure;

这样,无论何时在程序的某个地方引发异常:

raise Emergency_Exit;

它会将控制转移到null语句,然后该语句将到达主程序的末尾并退出程序。

这样做意味着你可以将清理代码添加到其他程序:

procedure Something_Else is
    ...
begin
    Direct_IO_Instance.Open (Some_File, Direct_IO_Instance.Out_File, "filename");
    begin
        ... do your work
    exception
        when Emergency.Emergency_Exit =>
                -- cleanup 
            Finish_Writing (Some_File);
            Direct_IO_Instance.Close (Some_File);
                -- now reraise, which will eventually reach the end of the program
            raise;
    end;
end Something_Else;

因此,当Emergency_Exit被引发时,它最终会将控制权转移到主程序的末尾,但它可能会在其他异常处理程序中停止,以便进行任何所需的清理。

如果有其他任务正在运行,我认为这不起作用,因为主程序会在程序退出之前等待其他任务完成。在这种情况下,在Ada 83中,您需要协调退出与其他任务;也许您可以定义一个全局布尔值,这些任务定期检查以使它们退出,或者您可以以某种方式构造程序,以便Emergency_Exit异常处理程序知道要中止的任务,或者可以调用任务条目让这些任务终止。最佳解决方案取决于实际的计划结构。

答案 1 :(得分:0)

在此页面上有一些关于如何操作的解释,以及存在的风险: http://rosettacode.org/wiki/Program_termination#Ada