我正在研究用C ++ Builder 2010编写的MDI应用程序。当子窗口处于最大化状态时,应用程序在空闲模式下消耗100%的CPU时间。
我使用过'Very Sleepy'分析器,它显示函数Sd_childFinalize
正在使用99%的CPU资源,但我无法在我的代码中找到它。 sd_Child.cpp是定义MDI子表单类的C ++单元。我只在可执行文件中找到@@Sd_child@Finalize
符号。请帮助我了解如何调试此问题。
答案 0 :(得分:13)
这似乎是与操作及其在应用程序空闲处理程序中更新方式相关的已知问题。以下质量控制报告描述了您的方案:http://qc.embarcadero.com/wc/qcmain.aspx?d=12706
根据质量控制报告,问题的解决方案是将TApplication.ActionUpdateDelay属性设置为大于0的值。
我想知道的是,为什么存在最大化的客户端表单会导致在繁忙的循环中调用VCL的DoActionIdle。据推测,执行动作的OnUpdate处理程序会导致另一个排队的消息,以及另一个空闲周期,依此类推。我曾经想过处理这个问题是解决这个问题的最佳方法,但也许很难实现。