我需要每1 ms触发一次定时器.该文档报告说,插槽调用可能比虚拟函数调用慢得多.
但是,如果我们用事件次数比较信号/插槽,什么机制会更快,更有效,产生更少的开销:QTimer与它的timeout()信号连接到插槽或裸QObject::startTimer()\ QObject::killTimer()用QObject::timerEvent()?
对于Windows和Linux,上述问题的答案是否相同?
QTimer实际上它只是一个围绕QObject::startTimer()功能的信号槽包装器,所以它无疑会在所有平台上都有更多的开销(它在内部实现QObject::timerEvent()- 它的实现只是为了发出timeout()信号).
值得注意的QBasicTimer是,围绕QObject::startTimer()功能是一个更轻量级的包装器.如果您使用QBasicTimer,您仍然需要实现QObject::timerEvent(),但它会为您管理计时器ID.因此,将a的QBasicTimer一些易用性QTimer与使用该QObject::startTimer()机制的效率相结合.
事实上,如果你需要精度,QT并不能保证你的计时器在1ms后完全执行.
至少直到QT 4.7.X,如果QT有一个事件(在事件循环内处理),所有定时器都在内部检查到期(然后在事件循环中"提升它们的信号").我的意思是,它们不会被执行为中断其他任务的操作系统事件等.
你可以得到的是1.5秒后执行的计时器,如果你的循环中任何其他3个事件需要例如每个0.5秒.
我希望我的记忆没有失败,几个月前我看了QT计时器代码,现在我不记得是否在其他事件之后或之前处理了计时器事件.
希望这会对你有所帮助.
| 归档时间: |
|
| 查看次数: |
6459 次 |
| 最近记录: |