总结

总结

为什么不能edit.com (16 位,又名 MS-DOS 编辑器)无法通过单击 Windows XP 或 Windows 7 上的 Virtual PC 中的关闭按钮成功终止,但可以通过单击文件出口

截图(非英文:-)):

英文中同样错误:

英文图片

答案1

为什么通过点击文件 → 退出可以成功终止 edit.com,但点击关闭按钮 ☒ 却不行?为什么关闭按钮会导致提示将其终止?

总结

因为 Edit 是一个 DOS 程序,所以文件 → 退出与 Windows 或按钮无关

子系统

Windows 有两个主要子系统(如果你愿意的话可以称为“框架”),程序可以使用它们来简化事情,避免程序员必须手动完成所有事情并重新发明轮子。一个是标准的 Windows 子系统,另一个是安慰子系统。

Windows 程序是 GUI(图形用户界面)程序,而控制台程序是 CLI(命令行界面)程序。它们是截然不同的设计,对其中一个有用的方法不一定对另一个有用。

Windows 子系统

Windows 子系统是更常见的子系统,具有图形窗口和控件的程序将使用它。程序的“心脏”是Windows 消息循环程序初始化并准备运行后,将进入无限循环,处于空闲状态,耐心等待某些事情发生。这可能包括用户输入、计时器响起、网络活动等。当 Windows 检测到程序必须或可能想要响应的某些更改时,它将向该程序发送消息。此时,如果消息是关于程序感兴趣的事情,它将使用处理程序对其进行响应,这只是一个功能做某事。

(这也是大多数游戏的运作方式。它们会有一个主游戏循环它等待来自游戏手柄按钮、计时器等的输入,然后更新游戏世界,渲染一帧,将其输出到屏幕,然后重新开始。)

程序挂起

通常情况下,当程序收到一条消息时,它会处理它或将其传递下去。这通常发生得很快。然而有时,程序可能会悬挂由于某种原因,这将导致它无法处理消息。Windows 可以检测到这种情况的发生,如果时间过长,它将认为程序已冻结,并建议让用户终止无响应的程序,而不是让它正常关闭。这意味着它将突然结束,不仅会丢失未保存的文件,还可能使打开的文件处于不一致的状态,从而损坏它们。

控制台子系统

控制台程序不同于图形化 Windows 程序。它们是从 DOS 祖先进化而来的,虽然它们从 Windows 命令提示符中获得了很多新功能,但从本质上讲,它们的功能与旧 DOS 程序非常相似,包括启动、运行和关闭的方式。

关闭程序

让我们检查一下单击这两种程序的按钮时会发生什么情况。

关闭 Windows 程序

当你单击Windows 程序的按钮时,Windows 会向该程序发送一个WM_CLOSE消息。程序的循环检测该消息并通过调用一个函数来响应,该函数执行结束 Windows 程序的标准例程(希望如此首先进行一些清理工作(如释放分配的资源、保存文件等)。除了任何清理工作之外,实际的关机过程非常快,Windows 将继续执行下一个任务。

关闭控制台程序

当你点击命令提示符的按钮时,你正在告诉命令提示符关闭。当它收到该消息时,它会尝试关闭,如果您在提示符下闲坐,它当然可以毫不犹豫地这样做。但是如果您在命令提示符中打开并运行某个程序,会发生什么?该程序是一个完全独立的进程。命令提示符不能直接杀死该程序,这不方便用户使用,并且可能会损坏数据或丢失未保存的文件。相反,它会尝试将关闭消息传递给程序。此时可能出现两种情况:

  • 如果该程序是 Windows 控制台程序,那么向其发送关闭消息通常会立即起作用,因为它是使用 Windows 控制台子系统编译的,虽然您可能会丢失一些未保存的文件,但由于它使用 Windows 特定的控制台代码,所以没有延迟,因此 Windows 不需要诉诸于终止它。

  • 但是,如果该程序是 DOS 程序(例如 Edit),那么它被编译为在 DOS 上运行,因此对 Windows 一无所知,所以不会响应,因此 Windows 认为它​​已挂起并建议终止该程序。

文件 → 退出

对于 Windows 程序,退出命令(通常File → Exit是)只是 的别名WM_CLOSE。退出程序时,它会收到关闭消息,就像您单击了关闭按钮一样。

使用编辑时,退出命令(也File → Exit)具有没有什么与 Windows 无关。这是 DOS 程序本身的内置功能。因此,单击“关闭”按钮与从 Edit 中退出完全不同,因此单击不会告诉程序关闭。

不同的结果

但是为什么 Kevin 得到的结果与其他人(和我)不同?这可能是由于 Windows 配置的用于检测程序何时冻结的例程的超时时间不同。实际上有几种不同的设置会影响此情况。更改设置会导致 Windows 在显示对话框之前等待更多或更少的时间。

我本来想把它们全部列出来,但在查找的过程中,我最终发现A邮政我之前已经将它们全部列出来了,所以如果有人对细节感兴趣,你可以在那里找到它们。

相关内容