Qt 定时器问题?

时间:2022-01-12 03:37:41
qt 定时器时间为int类型,传入毫秒数,但是一年的毫秒数超过了int的最大值,如何实现大于一年时间的定时器功能?求大神解答

9 个解决方案

#1


比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

#2


最简单的办法是级联,比如一个月,一个月级联么。

#3


引用 1 楼 dbzhang800 的回复:
比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。

案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。

#4


引用 2 楼 foruok 的回复:
最简单的办法是级联,比如一个月,一个月级联么。

目前想到一个类似的方法,自己封装定时器,在内部将长时间的定时器分离成N个小计时器,和你说的级联一样。

#5


引用 3 楼 donglangwudi 的回复:
Quote: 引用 1 楼 dbzhang800 的回复:

比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。

案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。


QTimer本来就没有(精度)这方面的保证,哪怕是1s的Internal,QTimer也不会保证间隔是1s。至于1ms,你太高看QTimer了,它没有这么高的精度。

#6


引用 5 楼 dbzhang800 的回复:
Quote: 引用 3 楼 donglangwudi 的回复:

Quote: 引用 1 楼 dbzhang800 的回复:

比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。

案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。


QTimer本来就没有(精度)这方面的保证,哪怕是1s的Internal,QTimer也不会保证间隔是1s。至于1ms,你太高看QTimer了,它没有这么高的精度。


在我印象中,如果将internal设置非常大,系统会不会自动计算触发时间,然后在到达这个时间点的时候触发这个事件? 而每秒或者毫秒去触发一次,在多次延时之后,经历过一年 的时间,会不会误差会明显变大?具体没有看QTimer的实现细节,个人观点,如果有理解错误的地方,还望大神指正。(PS:我的好多qt技术,都是看您的博客1+1 =2学到的,在此多谢!)

#7


当然,单纯如此累积,误差会非常大。

但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。

#8


引用 7 楼 dbzhang800 的回复:
当然,单纯如此累积,误差会非常大。

但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。

谢谢,用QElapsedTimer 解决了

#9


引用 7 楼 dbzhang800 的回复:
当然,单纯如此累积,误差会非常大。

但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。
DBZHANG大神 Qt 定时器问题?

#1


比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

#2


最简单的办法是级联,比如一个月,一个月级联么。

#3


引用 1 楼 dbzhang800 的回复:
比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。

案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。

#4


引用 2 楼 foruok 的回复:
最简单的办法是级联,比如一个月,一个月级联么。

目前想到一个类似的方法,自己封装定时器,在内部将长时间的定时器分离成N个小计时器,和你说的级联一样。

#5


引用 3 楼 donglangwudi 的回复:
Quote: 引用 1 楼 dbzhang800 的回复:

比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。

案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。


QTimer本来就没有(精度)这方面的保证,哪怕是1s的Internal,QTimer也不会保证间隔是1s。至于1ms,你太高看QTimer了,它没有这么高的精度。

#6


引用 5 楼 dbzhang800 的回复:
Quote: 引用 3 楼 donglangwudi 的回复:

Quote: 引用 1 楼 dbzhang800 的回复:

比较好奇,哪一类的需要 大于1年的定时器啊?

不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。

这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。

案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。


QTimer本来就没有(精度)这方面的保证,哪怕是1s的Internal,QTimer也不会保证间隔是1s。至于1ms,你太高看QTimer了,它没有这么高的精度。


在我印象中,如果将internal设置非常大,系统会不会自动计算触发时间,然后在到达这个时间点的时候触发这个事件? 而每秒或者毫秒去触发一次,在多次延时之后,经历过一年 的时间,会不会误差会明显变大?具体没有看QTimer的实现细节,个人观点,如果有理解错误的地方,还望大神指正。(PS:我的好多qt技术,都是看您的博客1+1 =2学到的,在此多谢!)

#7


当然,单纯如此累积,误差会非常大。

但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。

#8


引用 7 楼 dbzhang800 的回复:
当然,单纯如此累积,误差会非常大。

但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。

谢谢,用QElapsedTimer 解决了

#9


引用 7 楼 dbzhang800 的回复:
当然,单纯如此累积,误差会非常大。

但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。
DBZHANG大神 Qt 定时器问题?