【问题标题】:MDI application consumes 100% cpu in idleMDI 应用程序在空闲时消耗 100% cpu
【发布时间】:2012-09-17 06:51:37
【问题描述】:

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

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

【问题讨论】:

  • 为什么2012年还在用MDI?它在很久很久以前就被弃用了。
  • 我以前在 Delphi 中见过这个。我一时想不起来任何细节。
  • 这是一个相关的问题吗?:MDI app with ActionMenus uses 100% CPU when maximized.
  • @Mason MDI 可能已被 MS 弃用,但仍在使用。我的应用程序是 MDI 应用程序。我可以改变,但我认为这会激怒我的客户。
  • @TLama 你可以在不使用 MDI 的情况下做类似 MDI 的应用程序

标签: delphi c++builder mdi


【解决方案1】:

这似乎是一个与操作相关的已知问题,以及它们在应用程序空闲处理程序中的更新方式。以下 QC 报告描述了您的方案:http://qc.embarcadero.com/wc/qcmain.aspx?d=12706

根据 QC 报告,您的问题的解决方案是将 TApplication.ActionUpdateDelay 属性设置为大于 0 的值。

我很想知道为什么存在最大化的客户端表单会导致 VCL 的 DoActionIdle 在繁忙的循环中被调用。大概执行一个动作的 OnUpdate 处理程序会导致另一个排队的消息,以及另一个空闲周期,等等。我本以为处理这将是解决此问题的最佳方法,但也许很难实现。

【讨论】:

猜你喜欢
  • 2019-04-26
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2013-03-04
  • 2016-10-27
  • 1970-01-01
  • 2020-02-22
相关资源
最近更新 更多