gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:21:27 25 4
gpt4 key购买 nike

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

QDebug显示数据仍在处理中。

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

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

最佳答案

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

如果看不到工作线程中的某些代码,很难推荐解决方案。在一天结束时,您只想按指定的时间间隔发出信号。

您可能对QTime类有些运气。每次发出信号时,请调用QTime::start,然后检查QTime::elapsed值。仅当它超过某个特定阈值时,才发出信号并重置计时器。

如果您可以丢弃中间传感器值,那是理想的选择。如果全部需要它们,则必须将它们添加到QVector或其他内容中,然后在信号中一次将它们全部发送出去。

更好的是,如果您只能定期轮询传感器本身。在这种情况下,QTimer类可能很有用-使其在每次“滴答”时都轮询传感器(并发出信号)。

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

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com