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

Ada 83(仅限)如何结束包含多个程序的整个程序,ada,Ada,我使用的是Ada83(使用此版本是课程要求),我使用的是多个过程。我不知道如何从整个计划中走出来。C程序中的一些东西,比如退出,它关闭了整个过程。退出从何处调用?在本页中,有一些关于如何操作以及风险是什么的说明: 如果您的程序不使用任务,您可以定义表示“紧急出口”的异常;也许在某些包装中: package Emergency is Emergency_Exit : exception; end Emergency; 在主过程中,捕获此异常: procedure Your_Main_Pr

我使用的是Ada83(使用此版本是课程要求),我使用的是多个过程。我不知道如何从整个计划中走出来。C程序中的一些东西,比如退出,它关闭了整个过程。退出从何处调用?

在本页中,有一些关于如何操作以及风险是什么的说明:

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

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;
因此,当引发
紧急退出时,它最终会将控制权转移到主过程的末尾,但它可能会在其他异常处理程序中停止,以执行任何需要的清理


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

那里的第一个解决方案是使用
Ada.Task\u Identification
,在Ada 83中不可用。假设没有使用任务:简单的return语句不能完成任务吗?PS:IMHO强迫人们(尤其是学生)使用Ada 83也是非常残忍的。问题不是如何从主程序返回,而是当你嵌套了几个程序时如何立即退出。除非我看错了。@Darkstkhan是的,这就是我的意思。。谢谢,这是很好的解释,谢谢!!