2012-09-25 47 views
10

我正在編寫使用C++ Builder 2010編寫的MDI應用程序。當子窗口處於最大化狀態時,應用程序在空閒模式下消耗100%的CPU時間。MDI應用程序在空閒狀態下消耗100%的CPU

我已經使用'Very Sleepy'探查器,它顯示函數Sd_childFinalize正在使用99%的CPU資源,但我無法在我的代碼中找到它。 sd_Child.cpp是定義MDI子窗體類的C++單元。我只在可執行文件中找到了@@[email protected]符號。請幫我理解如何調試這個問題。

+0

爲什麼你仍然在2012年使用MDI?它很久以前就被棄用了。 –

+0

我在Delphi中見過這個。關於我的頭頂,我不記得任何細節。 –

+0

'sd_Child.cpp'不是我機器上安裝的標準C++ Builder的一部分,就像'MDI'指'多文檔接口'一樣,'SDI'通常指'單文檔接口',它不會是一個MDI應用程序框架的一部分。你在使用某種第三方軟件包嗎? –

回答

13

這似乎是一個已知問題,涉​​及到操作以及它們在應用程序空閒處理程序中的更新方式。下面的QC報告描述您的方案:http://qc.embarcadero.com/wc/qcmain.aspx?d=12706

解決您的問題,根據QC報告,是對TApplication.ActionUpdateDelay屬性設置爲一個值大於0

我很想知道爲什麼是最大化客戶端表單的存在導致VCL的DoActionIdle在繁忙循環中被調用。大概執行一個動作的OnUpdate處理程序會導致另一個排隊的消息,以及另一個空閒循環,等等。我曾認爲處理這個問題是解決這個問題的最好方法,但也許很難實現。

+0

請注意[QualityCentral現在已關閉](https://community.embarcadero.com/blogs/entry/quality-keeps-moving-forward),因此您無法再訪問'qc.embarcadero.com'鏈接。如果您需要訪問舊的QC數據,請查看[QCScraper](http://www.uweraabe.de/Blog/2017/06/09/how-to-save-qualitycentral/)。 –