Qt 定时器问题?

Trump_zhai 2014-07-28 11:56:11
qt 定时器时间为int类型,传入毫秒数,但是一年的毫秒数超过了int的最大值,如何实现大于一年时间的定时器功能?求大神解答
...全文
170 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 dbzhang800 的回复:
当然,单纯如此累积,误差会非常大。 但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。
DBZHANG大神
foruok 2014-07-28
  • 打赏
  • 举报
回复
最简单的办法是级联,比如一个月,一个月级联么。
dbzhang800 2014-07-28
  • 打赏
  • 举报
回复
比较好奇,哪一类的需要 大于1年的定时器啊? 不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。
Trump_zhai 2014-07-28
  • 打赏
  • 举报
回复
引用 7 楼 dbzhang800 的回复:
当然,单纯如此累积,误差会非常大。 但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。
谢谢,用QElapsedTimer 解决了
dbzhang800 2014-07-28
  • 打赏
  • 举报
回复
当然,单纯如此累积,误差会非常大。 但是我们肯定不会单纯去累积的,你完全可以在槽函数内,直接判断已经流逝了多少时间(QElapsedTimer ),或者判断距离目标还有多长时间(QDateTime)。
Trump_zhai 2014-07-28
  • 打赏
  • 举报
回复
引用 5 楼 dbzhang800 的回复:
[quote=引用 3 楼 donglangwudi 的回复:] [quote=引用 1 楼 dbzhang800 的回复:] 比较好奇,哪一类的需要 大于1年的定时器啊? 不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。
这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。 案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。[/quote] QTimer本来就没有(精度)这方面的保证,哪怕是1s的Internal,QTimer也不会保证间隔是1s。至于1ms,你太高看QTimer了,它没有这么高的精度。[/quote] 在我印象中,如果将internal设置非常大,系统会不会自动计算触发时间,然后在到达这个时间点的时候触发这个事件? 而每秒或者毫秒去触发一次,在多次延时之后,经历过一年 的时间,会不会误差会明显变大?具体没有看QTimer的实现细节,个人观点,如果有理解错误的地方,还望大神指正。(PS:我的好多qt技术,都是看您的博客1+1 =2学到的,在此多谢!)
dbzhang800 2014-07-28
  • 打赏
  • 举报
回复
引用 3 楼 donglangwudi 的回复:
[quote=引用 1 楼 dbzhang800 的回复:] 比较好奇,哪一类的需要 大于1年的定时器啊? 不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。
这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。 案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。[/quote] QTimer本来就没有(精度)这方面的保证,哪怕是1s的Internal,QTimer也不会保证间隔是1s。至于1ms,你太高看QTimer了,它没有这么高的精度。
Trump_zhai 2014-07-28
  • 打赏
  • 举报
回复
引用 2 楼 foruok 的回复:
最简单的办法是级联,比如一个月,一个月级联么。
目前想到一个类似的方法,自己封装定时器,在内部将长时间的定时器分离成N个小计时器,和你说的级联一样。
Trump_zhai 2014-07-28
  • 打赏
  • 举报
回复
引用 1 楼 dbzhang800 的回复:
比较好奇,哪一类的需要 大于1年的定时器啊? 不过实现起来倒是没什么难度,普通的 QTimer就行了,无非槽函数内加个计数器或者槽函数内根据QDateTime直接判断。
这个方法我考虑过,但是每毫秒或者每秒执行一次槽函数,在执行一年后,很可能会有偏差。 案例(只是随便想了个例子):设定某个事件,在每年的特定日期(比如十月一号早上八点),准时自动播放国歌,这个系统一直在运行着,只需安装设定一次就不需要在维护了。

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧