2015-10-14 73 views
2

当一个应用程序无法响应5秒(source),Windows可以显示“(无响应)”的标题栏,并在某些情况下,表现出“不响应”对话框:如何编程,以阻止Windows“没有响应”对话框

Not Responding dialog

理想地,5+第二执行不应阻塞主/事件处理线程,但有一个简单的(例如,1衬垫用于MFC C++)方式进行通信,以窗口主线程正忙,不应该被视为“未响应”应用程序被关闭?最简单的方法是简单地周期性地拨打PeekMessagePM_NOREMOVE

+1

如果你有一个轮胎瘪了,你想取代它,或者在城里开车与空气泵连接? **不要在你的主/主线程**中进行繁重的处理。 – Amit

+1

如果您有阻止消息泵的长时间运行的操作,最好的解决方案是有一个工作线程,它允许主线程继续工作,而不是等待。 –

+0

@Amit,是的,我同意,但是假设你有一辆有几十个扁平轮胎的旧卡车,你一周只能买一辆新轮胎。请让我知道在我尝试克服技术债务时是否有某个地方可以用作拐杖。 – JDiMatteo

回答

4

,其实并不存在黑客来解决这个问题。任何关于消息泵的行为都可能导致各种灾难,特别是在COM和其他系统消息处理方面。

撑不起来的主线程。

移动较长时间运行的任务背景或工作线程,要么轮询未来完成或纷纷跟帖发布消息回到GUI,以表示它是完整的,然后检索所需的结果。

1

没有,有没有快速的黑客,因为如果使用主线程喜欢你的应用程序确实没有响应。

4

在Windows 3.1的世界里,所有这些在以前的时间里,答案是将你的工作分成短期块,在窗口的消息过程中运行块,并通过调用PostMessage从块到块。

现在,您更新窗口以显示工作正在进行中,产生一个线程并在线程末尾调用一些与PostMessage相当的对象,以便您的窗口可以自行更新并显示结果。

相关问题