递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 398|回复: 9
打印 上一主题 下一主题

[视窗] 时钟100%可靠吗?

[复制链接]

61

主题

276

帖子

1587

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
1587
跳转到指定楼层
楼主
发表于 6 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hs999xl 于 2024-6-12 08:28 编辑

举个例子:
时钟.时钟周期=1000
周期事件=输出当前时间=xx时xx分xx秒
问问:
1、时钟一定每秒钟会输出一次吗?
2、如果程序再做耗费资源的任务,会不会导致时钟来不急执行就错过了?.
3、我想实现定时任务,xx时xx分执行一个方法,大佬们有什么经验吗?

回复

使用道具 举报

60

主题

852

帖子

3801

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3801
沙发
发表于 6 天前 | 只看该作者
如果你要以普朗克时间为基准的话,时钟显然是不可靠的。
但以时分秒为基准就无所谓了,肯定准。
回复

使用道具 举报

26

主题

1555

帖子

5807

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5807
板凳
发表于 6 天前 | 只看该作者
时钟的计时精度是比较差的,都有15毫秒左右的误差,如果需要高精度的计时,这肯定是不可靠。

然后Windows系统提供给你的时钟有三种:
1、SetTimer(MFC/WTL的时钟组件):周期事件在窗口的消息循环中运行,会阻塞UI线程,周期时间是两次事件中间的时间,必须等上一个周期时间执行完毕,才会计时执行一次周期事件,所以周期事件的耗时会增加到实际的时间间隔中;
2、timeSetEvent(多媒体时钟):单线程模式设计,除了不会阻塞UI线程之外,其他基本一样。由于周期事件在子线程中运行,需要谨慎操作窗口;

3、timer-queue(时钟队列):线程池模式设计,周期事件之间不会互相阻塞,每次事件触发的实际时间间隔是固定的(排除计时误差后);
回复

使用道具 举报

61

主题

276

帖子

1587

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
1587
地板
 楼主| 发表于 6 天前 | 只看该作者
突然想到一个实现定时任务的方法:
时钟周期事件=根据当前时、分、秒cha询定时任务哈希表,哈希表里存静态方法地址,如果取到就执行。
貌似就实现了时分秒的定时任务。
回复

使用道具 举报

49

主题

366

帖子

2348

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
2348
5#
发表于 6 天前 | 只看该作者
貌似不太准
长期从事编程教学课程研发,联系QQ:332690958
回复

使用道具 举报

5

主题

138

帖子

1467

积分

金牌会员

Rank: 6Rank: 6

积分
1467
6#
发表于 6 天前 | 只看该作者
界面如果卡了,时钟就不准了吧
回复

使用道具 举报

4

主题

31

帖子

218

积分

中级会员

Rank: 3Rank: 3

积分
218
7#
发表于 5 天前 | 只看该作者
如果程序再做耗费资源的任务,会不会导致时钟来不急执行就错过了?.

条件允许的话执行事件都丢线程里面去
回复

使用道具 举报

61

主题

276

帖子

1587

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
1587
8#
 楼主| 发表于 5 天前 | 只看该作者
peeete 发表于 2024-6-13 16:46
如果程序再做耗费资源的任务,会不会导致时钟来不急执行就错过了?.

条件允许的话执行事件都丢线程里面去 ...

听君一席话,省我10本书。
回复

使用道具 举报

2

主题

31

帖子

168

积分

注册会员

Rank: 2

积分
168
9#
发表于 4 天前 | 只看该作者
没有100%可靠的计时器,不管用什么方式去实现时钟,都有可能出现延迟
回复

使用道具 举报

61

主题

276

帖子

1587

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
1587
10#
 楼主| 发表于 4 天前 | 只看该作者
延迟执行也行,就怕错过了时间,代码就不执行了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-6-18 19:57 , Processed in 0.093319 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表