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

===============>>#1 票数:3 已采纳

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

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异常处理程序知道要中止的任务,或者可以调用任务条目来获取这些任务终止。 最佳解决方案取决于实际的计划结构。

===============>>#2 票数:0

在这个页面上有一些关于如何做的解释,以及风险是什么: http//rosettacode.org/wiki/Program_termination#Ada

  ask by ssr translate from so

未解决问题?本站智能推荐: