情况是这样的:
- 您有一个在后台线程中运行的长时间运行的计算。
- 此计算会发出一个信号,例如,每 100 毫秒刷新一次 GUI 元素。
- 假设它发出了 100 个这样的信号。
- 正在重绘的小部件需要超过 100 毫秒才能重绘;假设 1 秒。
事件循环中发生了什么?信号调用是否“堆积”直到它们全部执行(即 100 秒)?是否有任何“删除”事件的机制?
最佳答案
用户事件永远不会被丢弃。如果您将发出的信号事件排队的速度快于您处理它们的速度,那么您的事件队列将会增长,直到您用完内存并且您的程序将崩溃。不过,值得注意的是,如果系统负载过重,QTimer 将跳过超时事件。在某种程度上,这可能有助于调节您的吞吐量。
您还可以考虑从一个线程向另一个线程发送反馈(也许是一种确认),并根据消费者线程落后的程度手动调整生产者线程中的时间。或者,您可以使用比喻大锤并切换到阻塞队列连接。
关于c++ - Qt:如果你发送信号太快会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999180/