在不减慢主应用程序速度的情况下在后端运行成员函数的技巧是什么

What is the trick to run a member function in the back-end without slowing down the main application?

本文关键字:成员 运行 函数 是什么 后端 情况下 应用程序 速度      更新时间:2023-10-16

对不起,我不知道如何在标题中表达这一点,也许有人可以帮助我。

我开始制作一个Qt应用程序,比方说,该应用程序将首先在屏幕上显示N点。那么我们现在有一个函数,叫做movePoints,当它被调用时,这些点会根据一些算法被移动。

现在,当N很小时,一切看起来都非常流畅,它运行良好,没有任何问题。但是,如果N非常大,则整个GUI都会很糟糕,因为movePoints正在运行。因此,每当我现在触摸应用程序窗口时,它都会变得无响应。但我知道很多程序似乎能够让movePoints函数在后端运行(状态栏中有一个进度条或其他东西),而不会减慢主应用程序的速度。如何实现此效果?

若要使应用程序响应用户交互,应使用 processEvents 函数。(http://qt-project.org/doc/qt-4.8/qcoreapplication.html#processEvents)

如果您希望操作在后台进行,则可以使用QtConcurrent 模块并使用异步运行函数(http://qt-project.org/doc/qt-4.8/qtconcurrentrun.html)。

使用 QTimer 进行中断,或使用 QThread 将计算从主循环中取出。请参阅:http://qt-project.org/doc/qt-4.8/threads.html

您可以使用单独的线程在后台执行计算,而不会阻塞 Qt 事件循环。参见 QThread 和 QConcurrent。在处理密集型Qt应用程序中,通常的做法是让主线程处理GUI,而"后端"计算在"worker"线程中完成。

如果呈现数据(而不仅仅是计算下一个状态)也是一个密集型操作,则还可以使用工作线程创建 QImage、QGraphicsScene 或类似类型的对象,并将其预先生成发送到 UI 线程。

如果你仅限于单个线程(例如,你的平台并不真正支持线程),那么你可以将你的算法和穿插调用带到QCoreApplication::p roccessEvents,这将使GUI在活动运行时更具响应性。不过,我发现使用实际线程往往是更简单、更易于维护的方法。