情况如下:
事件循环中会发生什么?信号调用是否“堆积”,直到它们全部执行(即100秒)?是否有“删除”事件的机制?
发布于 2012-04-03 10:40:57
用户事件永远不会被丢弃。如果队列发出的信号事件比处理速度快,则事件队列将增长,直到内存耗尽,程序崩溃。值得注意的是,如果系统负载很重,QTimer将跳过超时事件。在某种程度上,这可能有助于调节吞吐量。
您还可以考虑将反馈从一个线程发送到另一个线程(可能是确认),并根据使用者线程的距离手动调整生产者线程中的时间。或者,您可以使用一个隐喻的大锤并切换到阻塞的队列连接。
发布于 2012-04-03 11:00:36
在您的示例中,您可以测量小部件中的绘制时间。如果绘图以240 ms为例,那么您可以快速地处理接下来的2个信号,而不需要绘制任何东西。这样信号就不会堆积起来。
编辑:
实际上,在我的解决方案中有一个小问题。最后一个信号应该总是导致重绘,否则当计算完成时,小部件会显示错误的数据。
当一个信号被跳过时,可以启动一个单一的定时器,例如,间隔150 ms。当由于信号而进行重绘时,将停止此定时器。因此,在最后一次重绘信号之后,这个单一的射击定时器将导致最终状态的绘制。我想这是可行的,但会很复杂。
在计算开始时启动一个简单的计时器来重新绘制很可能是一种更好的方法。如果小部件的绘制需要大量时间,则可以根据绘制时间动态调整计时器间隔。
https://stackoverflow.com/questions/9999180
复制相似问题