【问题标题】:How to make an interface made in C++ Builder responsive during a heavy computation?如何在繁重的计算过程中使 C++ Builder 中的接口响应?
【发布时间】:2012-06-17 11:32:07
【问题描述】:

我有一个用 C++ Builder 6 编写的软件(是的,我知道它已经过时了,我不会重写它)。它进行繁重的数字运算,需要几分钟才能完成。我希望界面在这些计算期间能够响应。我记得在 Delphi 中有一个非常简单的解决方案来解决这个问题 - 调用表单/应用程序的特殊方法,但我不记得它是什么。有什么建议吗?

【问题讨论】:

  • 最好的解决方案是将计算放在一个单独的线程中。 ProcessMessages 可能会导致痛苦。
  • 是的,但是重写代码以在单独的线程中工作也可能会导致痛苦。有时可以接受一些简单的解决方案。
  • Andrew:面对类似的情况(更紧迫,因为我的计算可能会持续数小时),我将计算转移到一个单独的线程中,速度提升令人难以置信!操作系统将我的计算线程移动到另一个核心(不是前台进程使用的核心),计算速度快得多。值得在重构方面进行少量投资。
  • @Andrew 这取决于代码的混乱程度。但是,通常将代码移动到单独的线程中并没有那么痛苦。几天前我在另一个线程上写了一个相关的答案:stackoverflow.com/a/11047262/446105。如果您不熟悉 TThread 对象,您可能会从中获得一些帮助(它是 Delphi 代码,但我猜 TThread 对象在 C++ Builder 中的工作方式相同)。

标签: delphi user-interface c++builder


【解决方案1】:

Application.ProcessMessages(); 但它有dark side

【讨论】:

    【解决方案2】:

    在 Delphi 中,这是Application.Processmessages()。请注意,调用该方法有一些副作用,如 here 所述。

    【讨论】:

      【解决方案3】:

      你知道你必须这样做,安德鲁。你知道你必须在一个单独的线程中处理数字。现在去实现它。

      【讨论】:

        【解决方案4】:

        您可以修改程序以在后台线程中执行所有数字运算,这不会锁定您的 GUI。比这里的其他答案更复杂,但这是您可以选择的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-03
          • 1970-01-01
          • 2011-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-08
          • 2019-12-26
          相关资源
          最近更新 更多