multithreading - Qt:使用线程和信号/槽时 GUI 有时会卡住

标签 multithreading qt

我有两个(替代)函数处理传感器提供的数据。这些函数在自己的线程中运行,并在结果准备好时发出信号。该信号连接到 UI 小部件的插槽,显示结果。 使用其中一项功能,效果很好。然而,当使用另一个时,GUI 开始滞后并很快卡住。

QDebug 显示数据仍在处理中。

在GUI线程中运行代码时,没有问题。

问题可能是工作线程生成数据的速度比 UI 绘制数据的速度快,从而导致 Qt::QueuedConnection 导致一些延迟?如果是这样,我还有什么选择?如果没有,我还能检查什么?

最佳答案

工作线程似乎正在向 UI 线程发送垃圾邮件,填满主事件循环,导致 GUI 事件很难得到处理。

如果没有看到工作线程中的一些代码,就很难推荐解决方案。归根结底,您只想以指定的时间间隔发出信号。

您可能对 QTime 类有一些运气。每次发出信号时,调用 QTime::start 然后检查 QTime::elapsed 值。只有当它高于某个阈值时,才会发出信号并重置计时器。

如果您可以丢弃中间传感器值,那就太理想了。如果您需要全部,则必须将它们添加到 QVector 或其他东西中,并在信号中一次性发送它们。

如果您只能定期轮询传感器本身,那就更好了。 QTimer 类在这种情况下可能很有用——让它在每次“滴答”时轮询传感器(并发出信号)。

关于multithreading - Qt:使用线程和信号/槽时 GUI 有时会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8123404/

相关文章:

multithreading - 基于 Go 的 http 包构建的 Web 应用程序是否作为使用多个线程处理传入请求的单个进程工作?

c# - 如何从 QByteArray 获取结构

c++ - '非标准语法;使用 '&'创建一个指向具有线程的成员的指针

java - 如何为在不同线程中运行的变量实现变量更改监听器(示例)

c++ - 将参数从 Qt 传递到 shell 脚本文件

c++ - QT 文件菜单未集成到标题栏中

android - 使用Qt和Java在sqlite中保存和检索图片

c++ - Windows 上的 Qt5 部署

c++ - Qt 界面卡住后台任务

c# - 克服共享对象线程问题的最佳解决方案