java - 如何激怒 "Application not responding"

标签 java c windows visual-c++

出于测试目的,我需要编写一个程序,将著名的“应用程序未响应”消息显示在屏幕上。 我不知道我怎么会激起这样的 react 。

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

最佳答案

在 Windows API 中,GUI 程序通过消息从操作系统获取输入,并且它必须在 message loop 中接收和分派(dispatch)这些消息。 。发生的任何事情(鼠标移动/单击、按键,以及退出应用程序的请求等)都会作为消息传递。

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

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

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

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

关于java - 如何激怒 "Application not responding",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567053/

相关文章:

与 TeamViewer 相同的 Windows 安装程序

java - 无法连接到主机 MyServerName

java - Citrus 框架 - 无法成功构建示例

c++ - GStreamer gst_element_factory_make 失败

C Hook 库函数调用

c - 从 ReadFile 中检测错误数据

c++ - IP_ADAPTER_ADDRESSES_LH 中的 IP 地址在哪里

JAVA_HOME 指向无效的 Java 安装

java - Android 在 fragment 之间滑动

java - 如何使用 Java Compiler Tree API (com.sun.source.util) 重构源代码