11

I'm working on MDI application written in C++ Builder 2010. When child window is in maximized state, application consumes 100% of CPU time in idle mode.

I have used 'Very Sleepy' profiler and it shows that function Sd_childFinalize is using 99% of CPU resources but I can't find it in my code. sd_Child.cpp is the C++ unit where MDI child form class is defined. I only found @@Sd_child@Finalize symbol in executable file. Please help me to understand how to debug this issue.

4

1 に答える 1

14

これは、アクションと、アプリケーションのアイドル ハンドラーでのアクションの更新方法に関連する既知の問題のようです。次の QC レポートは、あなたのシナリオを説明しています: http://qc.embarcadero.com/wc/qcmain.aspx?d=12706

QC レポートによると、問題の解決策は、TApplication.ActionUpdateDelayプロパティを 0 より大きい値に設定することです。

私が知りたいのは、最大化されたクライアント フォームが存在すると、VCL の DoActionIdle がビジー ループで呼び出される理由です。おそらく、アクションの OnUpdate ハンドラーを実行すると、キューに入れられた別のメッセージや別のアイドル サイクルなどが発生します。これに対処することがこの問題に取り組む最善の方法だと思っていましたが、おそらく達成するのは難しいでしょう。

于 2012-09-25T20:15:39.823 に答える