我需要以非常精确的时间(毫秒级)闪烁一些图像,为此我开发了QGLwidget的子类。在初始化时将图像作为纹理加载。我正在使用QTimer实例来更改正在显示的图像。定时器的timeOut信号连接到timeOutSlot,后者执行一些文件I / O,然后调用updateGL()。
虽然我知道事件处理程序用于外部事件,而信号/插槽用于GUI内部通信,但我也可以将其实现为timeOutEvent处理程序。
这两者之间是否有任何性能差异?任何超过2-3毫秒的性能损失对我来说都很重要(硬件是平均的,比如英特尔酷睿2双核T5700和nVidia 8600M GT显卡)。
答案 0 :(得分:1)
信号和插槽比普通的旧函数调用慢大约10倍。但它们肯定不是那么慢,以至于需要几毫秒才能完成。处理一个信号的时间约为0.001 ms(see slide 27)。
您说您需要非常精确的计时,所以您是否知道显示刷新率如何影响绘图?使用60 Hz刷新率(通常)绘制图像。图像之间的时间间隔为16.7毫秒,这是您可以获得的最大精度。
答案 1 :(得分:0)
我会说信号/插槽因为事件被添加到事件队列中,其中Qt经常调用优化和重要性排序,而s / s立即执行 - 虽然比直接调用慢。