如何编程以防止Windows"无响应"对话框

时间:2015-10-14 20:31:32

标签: c++ mfc

当应用程序无法响应5秒钟(source)时,Windows可以显示"(无响应)"在标题栏中,在某些情况下显示"没有响应"对话框:

Not Responding dialog

理想情况下,5秒以上的执行不应该阻止主/事件处理线程,但是有一个简单的(例如1个MFC C ++的线程)方式与Windows通信,主线程正忙,不应该这样做。被视为"无回应"申请被关闭?是最快的黑客只是定期用PM_NOREMOVE来调用峰值PeekMessage吗?

3 个答案:

答案 0 :(得分:4)

在Windows 3.1世界中所有那些人之前,答案是将您的工作划分为短时间块,在窗口的消息过程中运行块,并通过调用PostMessage从块到块

现在你更新窗口以显示工作正在进行中,产生一个线程并在线程结束时调用一些PostMessage等效项,以便窗口可以自行更新并显示结果。

答案 1 :(得分:4)

真的没有黑客可以解决这个问题。任何关于消息泵的故事都可能导致各种灾难,尤其是COM和其他系统消息处理。

不要阻止主线索。

将运行时间较长的任务移至后台或工作线程,并轮询未来完成或让线程将消息发回GUI以表示其已完成,然后检索所需的结果。

答案 2 :(得分:1)

不,没有快速破解,因为如果您使用这样的主线程,您的应用确实没有响应。