帮助 QT 编程与 QThread 类,如何使用它

Posted

技术标签:

【中文标题】帮助 QT 编程与 QThread 类,如何使用它【英文标题】:Help in QT programming with QThread class, how to use it 【发布时间】:2011-04-13 18:19:05 【问题描述】:

所以我意识到我上次的解释不太清楚,所以我会再试一次。

我有一个程序,它有一个传感器类,它每 40 毫秒左右从 Lego NXT 传感器获取值。我还有另一个绘图类(我相信在同一个线程中运行),它在虚拟世界中使用 opengl 每 1 毫秒绘制和移动汽车。现在的问题是,每当我的传感器获取信息时,汽车就会非常迟钝并且行驶缓慢,但是当传感器关闭并且无法获取和输入数据时,汽车会平稳运行。我该如何解决这个问题,我相信我需要创建另一个线程但我不知道该怎么做?

注意:传感器与汽车无关。

【问题讨论】:

签出 - ***.com/questions/4093159/… 这显示了如何创建一个线程并链接到正确的文档 这个问题太宽泛了。就好像您在要求 QThread 文档和关于什么是线程以及何时以及如何使用它们的概述。 【参考方案1】:

对线程给出一个通用的答案并不容易。 Qt 为您提供了各种类来实现线程,因此最好看一下示例。一般来说,您不需要使用 Qt 进行线程处理,除非您有一个 blocking api,我猜您的 sensor 模块/类 是。

这是一个nice video 实时展示如何创建在另一个线程上运行的对象。您可以尝试将演示中的LenghtyOperation 实现为您的类,该类从您的传感器读取数据,然后发出信号以更新您的 GUI 线程。

这是另一个链接:Threading without the headache

【讨论】:

该视频非常好(并且相对较新),并演示了如何正确使用 QThread 和 QObject 的子类(不是 QThread 子类)。它似乎也很好地涵盖了其他多线程选项。您的第一个网页链接(尽管已过时)暗示了 QThread 的正确方法。尽管第二个和第三个链接指向当前文档,但该文档仍然不正确并建议子类化 QThread。 嗯,最后两个链接是为了完整性...正在考虑将它们标记为“旧方式”,但不确定这是否是正确的方式...所以我已经编辑并删除它们 - 谢谢。 +1 用于包含视频。我已经用 QThreads 玩了几个月了,但是在视频播放到一半的时候,我发现我使用它们变得比原来更难了。 @DerickSchoonbee,你的视频链接坏了。

以上是关于帮助 QT 编程与 QThread 类,如何使用它的主要内容,如果未能解决你的问题,请参考以下文章

(73课)Qt中的多线程编程

Python Qt GUI设计:多线程中信号与槽的使用(基础篇—9)

Qt 多线程和网络编程学习

QT的多线程使用

QT之深入理解QThread

Qt线程