c++ - Qt:如果你发送信号太快会发生什么?

标签 c++ multithreading qt

情况是这样的:

  • 您有一个在后台线程中运行的长时间运行的计算。
  • 此计算会发出一个信号,例如,每 100 毫秒刷新一次 GUI 元素。
  • 假设它发出了 100 个这样的信号。
  • 正在重绘的小部件需要超过 100 毫秒才能重绘;假设 1 秒。

事件循环中发生了什么?信号调用是否“堆积”直到它们全部执行(即 100 秒)?是否有任何“删除”事件的机制?

最佳答案

用户事件永远不会被丢弃。如果您将发出的信号事件排队的速度快于您处理它们的速度,那么您的事件队列将会增长,直到您用完内存并且您的程序将崩溃。不过,值得注意的是,如果系统负载过重,QTimer 将跳过超时事件。在某种程度上,这可能有助于调节您的吞吐量。

您还可以考虑从一个线程向另一个线程发送反馈(也许是一种确认),并根据消费者线程落后的程度手动调整生产者线程中的时间。或者,您可以使用比喻大锤并切换到阻塞队列连接。

关于c++ - Qt:如果你发送信号太快会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999180/

相关文章:

c++ - Microsoft Visual C++ 2010 无法调试?

Python并行编程模型

android - CountDownTimer 更新和阻塞

c++ - Qt 中 QObjects 的引用赋值是如何完成的?

qt - 如何将项目添加到布局中的特定索引

c++ - 带有 mmap 地址的复制构造函数

c++ - C++中哪种数据结构适合实现浏览器历史记录?

c++ - 如何解决我在尝试通过 C++ 执行 Lua 文件时遇到的这个错误?

c# - 异步执行方法的最快方法?

c++ - 无法在 Windows Qt 5.7 (C++) 中为数组指定显式初始值设定项