在長期操作過程中,我們的C++ Win32應用程序顯示一個模態狀態對話框,其中每隔幾秒鐘左右不定期更新一個進程欄。從Windows 7開始,我們意識到Windows很快會顯示一條消息「似乎掛起...」和/或將「未響應」附加到我們的窗口標題欄。忙碌的應用程序在Windows 7上導致錯誤的「無響應」狀態 - WM_UPDATE
我們發現進程對話框必須處理消息以避免這種情況。更具體地說,Windows 7似乎不斷髮送WM_UPDATE消息來檢查我們的程序是否存在。我們之前已經在此對話框中禁用了所有不需要的消息處理,因爲配置文件運行表明它們是主要的減速。儘管我們已經解決了這個問題,但用戶仍然在報告這些問題:Windows顯示「似乎掛起...」和/或將「未響應」附加到窗口標題欄上,儘管我們每次處理所有事件幾秒鐘。
問題:
是否有關於Windows 7(或Windows Vista)這種行爲變化的任何文檔?我們還沒有找到任何。我們還發現了許多其他消息行爲的變化。
是否有可能從Windows禁用所有這些「活着」檢查的方法?我們的應用程序非常活躍,流程可能需要很長時間。
編輯:更具體的 - 我們只能做到每幾秒鐘被調用消息泵PeekMessage
/TranslateMessage
/DispatchMessage
。
由於這是一個相當古老的遺留程序,在不久的將來不可能使用單獨的工作線程。我們當然會爲新代碼做這件事。請注意,我的主要觀點是,這種行爲絕對隨Windows Vista/Windows 7而改變。我還沒有發現任何文檔。
這對於後臺工作線程來說是大喊大叫。 – Deanna
「禁用所有**不需要**消息處理」 - MSDN對此主題非常清楚:「如果[窗口過程]不處理消息,它必須**將消息發送回系統進行默認處理。窗口過程通過調用'DefWindowProc'函數來完成。「 – MSalters
請參閱我的編輯 –