• 11343阅读
  • 4回复

[讨论]QTimer运行机制简单理解(大家指教) [复制链接]

上一主题 下一主题
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-21
QTimer运行机制简单理解可参看附件图:
以下是几点认识:
(1)    QT程序的事件循环是一个单线程的执行过程,程序严格按代码流程执行。
(2)    如果不考虑系统的线程调度,对于单线程程序,正在执行中的代码不会被打断!
(3)    参考QTimer运行机制,可以知道:当处理某事件所使用的时间过长时,在这段时间中QTimer并不会触发。其只会在事件处理完后与上一次设置的时间标记点进行比较,若timeout,则触发。
(4)    QTimer不存在某段时间中累积数次触发的情况。比如处理某事件需要10秒,QTimer定时每2秒触发一次。在开始处理事件到处理事件完毕的这段时间中,不会发生QTimer的触发。当处理完事件后,QTimer也只会触发1次,而不是5次。


以上是个人对QTimer的理解,理解中有什么不对的地方,还请各位多多指点。或者大家也可以发表下自己对QTimer运行机制理解。
[ 此帖被我要下载代码在2011-03-21 17:08重新编辑 ]
离线wxj120bw

只看该作者 1楼 发表于: 2011-03-22
引用楼主我要下载代码于2011-03-21 17:05发表的 QTimer运行机制简单理解(大家指教) :
QTimer运行机制简单理解可参看附件图:
以下是几点认识:
(1)    QT程序的事件循环是一个单线程的执行过程,程序严格按代码流程执行。
(2)    如果不考虑系统的线程调度,对于单线程程序,正在执行中的代码不会被打断!
(3)    参考QTimer运行机制,可以知道:当处理某事件所使用的时间过长时,在这段时间中QTimer并不会触发。其只会在事件处理完后与上一次设置的时间标记点进行比较,若timeout,则触发。
.......

1 qt程序的事件循环的确在一个单线程里执行,这个单线程也被称为主线程,程序严格按代码流程执行,就要看代码怎么写的。
2 qt线程有个terminated函数和quit函数,调用terminated函数好像可以中断。
3 这个到没有接触过。

尽供参考。
[ 此帖被wxj120bw在2011-03-22 01:09重新编辑 ]
只看该作者 2楼 发表于: 2011-03-22
恩,上面我的理解都是基于单线程的基础上的。至于多线程,还没怎么接触,多谢楼上指教。
[ 此帖被我要下载代码在2011-03-22 08:50重新编辑 ]
离线icyrat

只看该作者 3楼 发表于: 2011-12-03
学习了,,没有发现什么错误
离线ninsun

只看该作者 4楼 发表于: 2011-12-03
因为Qt的信号槽机制实际上会消耗一定的调用与处理时间,导致了QTimer有一个软的最短时间间隔的极限(我的机器大概是100ms,机器好也许会进一步降低),
所以在需要处理短间隔的时候(例如超快速度的逐个文字显示的特效 或者 需要达到每秒60帧的刷新类似的极短间隔的事件),推荐使用QObject的QTimerEvent事件.
事件可能是因为其直接的函数调用,效率要比QTimer的信号槽机制的效率高.
快速回复
限100 字节
 
上一个 下一个