当应用程序无法响应5秒钟(source)时,Windows可以显示"(无响应)"在标题栏中,在某些情况下显示"没有响应"对话框:
理想情况下,5秒以上的执行不应该阻止主/事件处理线程,但是有一个简单的(例如1个MFC C ++的线程)方式与Windows通信,主线程正忙,不应该这样做。被视为"无回应"申请被关闭?是最快的黑客只是定期用PM_NOREMOVE
来调用峰值PeekMessage吗?
答案 0 :(得分:4)
在Windows 3.1世界中所有那些人之前,答案是将您的工作划分为短时间块,在窗口的消息过程中运行块,并通过调用PostMessage
从块到块
现在你更新窗口以显示工作正在进行中,产生一个线程并在线程结束时调用一些PostMessage等效项,以便窗口可以自行更新并显示结果。
答案 1 :(得分:4)
真的没有黑客可以解决这个问题。任何关于消息泵的故事都可能导致各种灾难,尤其是COM和其他系统消息处理。
不要阻止主线索。
将运行时间较长的任务移至后台或工作线程,并轮询未来完成或让线程将消息发回GUI以表示其已完成,然后检索所需的结果。
答案 2 :(得分:1)
不,没有快速破解,因为如果您使用这样的主线程,您的应用确实没有响应。