在不减慢主应用程序速度的情况下在后端运行成员函数的技巧是什么
What is the trick to run a member function in the back-end without slowing down the main application?
对不起,我不知道如何在标题中表达这一点,也许有人可以帮助我。
我开始制作一个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在活动运行时更具响应性。不过,我发现使用实际线程往往是更简单、更易于维护的方法。
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 在运行时选择类成员的类型
- 运行时多态性 - 箭头运算符访问了错误的成员?
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 在运行时为随机分布类成员设置最小和最大边界?
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 参数包推导不一致 int 和 int& 在可变参数模板化成员函数中创建运行成员函数的线程
- 在另一个 QThread 上运行成员方法时,无法将事件发送到其他线程拥有的对象
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 如何子类可运行任何成员功能
- 如何在运行时使用静态成员函数初始化静态成员变量
- 由于固定尺寸成员而引起的EIGEN运行时断言
- 从成员变量更新类变量或调用类功能是给出运行时错误
- 有没有办法检测当前成员函数是在左值还是右值上运行?
- 移动包含正在运行的 std::thread 成员的对象
- 如何在Google测试(gtest)中使用fixture成员值运行参数化测试
- 在单独的线程中运行成员功能
- 如果其对象在多个线程中运行,我们是否需要锁定类成员功能
- 如何在组合中在运行时更改成员对象?