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