11

我正在开发用 C++ Builder 2010 编写的 MDI 应用程序。当子窗口处于最大化状态时,应用程序在空闲模式下消耗 100% 的 CPU 时间。

我使用了“非常昏昏欲睡”的分析器,它显示该函数Sd_childFinalize正在使用 99% 的 CPU 资源,但我在我的代码中找不到它。sd_Child.cpp 是定义 MDI 子窗体类的 C++ 单元。我只@@Sd_child@Finalize在可执行文件中找到符号。请帮助我了解如何调试此问题。

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 回答