如何引起“应用程序不响应”

时间:2018-07-28 00:32:17

标签: java c windows visual-c++

出于测试目的,我需要编写一个程序,该程序将在屏幕上显示著名的“应用程序无响应”消息。 我不知道该怎么惹。

最快和最简单的方法是什么?最好是C / C ++或Java

1 个答案:

答案 0 :(得分:1)

在Windows API中,GUI程序通过 messages 从操作系统获取输入,并且必须在message loop中接收和分发这些消息。发生的一切(鼠标移动/单击,按键按下,以及诸如退出应用程序的请求之类的东西)都作为消息传递。

在创建每个 window 后,您可以附加一个回调函数,该函数实际上处理与该窗口相关的消息(请注意,每个GUI元素都是一个 window ,例如按钮或文本输入字段)。在Windows API中,此回调称为window procedure

当应用程序无法及时处理消息时,操作系统会显示消息“应用程序无响应”。因此,在代码中的某个地方,您只需停止处理消息就可以激发它,例如,您可以有意在消息循环或窗口过程中输入无限循环。

现在,如果您使用Java进行编码或使用C中的某些GUI工具包(例如GTK),则无需编写自己的消息循环和窗口过程,框架/工具包将为您提供这些信息,并为您提供一个抽象的更高级别的界面。是否可以引发无响应的应用程序取决于框架的设计。您基本上需要占用“ UI线程”(例如,在通常处理消息的主线程中执行无限循环,因此它无法完成其工作)。

如果由于有错误的应用程序而显示此消息,则表明该错误正在主线程中执行以下操作:a)无限循环,b)无限阻止或c)进入死锁。永远不要在Win32应用程序的主/ UI线程中执行无法立即完成的操作。或者,更一般地说,您永远不要在任何GUI程序中处理事件/处理消息的线程中执行类似的操作。