2015-10-14 57 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相當的對象,以便您的窗口可以自行更新並顯示結果。