游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3643|回复: 7

关于Timer的误差

[复制链接]

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2003-12-15 03:53:00 | 显示全部楼层 |阅读模式
经测试,用SetTimer建立的定时器,每次执行的间隔比设定的延时要慢1至16毫秒,如SetTimer(hWnd,1,160,TimerProc),设定160毫秒但实际每隔172毫秒才执行一次,这似乎因为它使用不精确的GetTickCount()所造成的。

请问有没办法可以减少误差?最好误差小于1毫秒。
因为是服务器,不想用while循环.

难道没有其他类似SetTimer而又高精度的计时器了吗?
大哥们教教我吧,谢了.  

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2003-12-15 21:49:00 | 显示全部楼层

这回有救了

找到两个函数

MMRESULT timeSetEvent(UINT uDelay,UINT uResolution,LPTIMECALLBACK lpTimeProc,DWORD dwUser,UINTfuEvent)

MMRESULT timeKillEvent(UINT uTimerID)

据说精度可以自由设定,最低误差可以是1ms.

我只知道timeGetTime(),想不到它身边还有这么一位好兄弟啊~~. [em20]

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2003-12-15 22:46:00 | 显示全部楼层

还有事


测试了timeSetEvent()后非常满意~~~~

但不知效率如何,占用CPU周期多吗?熟悉timeSetEvent定时器的高手们请为小弟讲解一下~~感激不尽. [em5]

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2003-12-16 00:45:00 | 显示全部楼层

Re:关于Timer的误差

收到你的QQ消息,关于时间误差我也考虑过,只是一直没什么良方,最近也一直没时间去研究这些东西,如果有好的解决方案,还望不吝赐教。

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2003-12-16 04:46:00 | 显示全部楼层

大哥您真是不耻下问啊~~

用timeSetEvent建立定时器真的很好,TimerProc每次运行都会调整误差,就算设定精度为50ms,运行N次之后,总误差仍然小于50ms,
而不像SetTimer建立的会累积误差,变成50ms*N。
若设定精度为1,那么误差最多只有1ms,一个字:强~~~ [em3]

就怕耗费CPU过多,所以我设为16,但也足够。

3

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2004-1-5 10:15:00 | 显示全部楼层

Re:关于Timer的误差

SetTimer 的最小精度为 55ms 左右。

3

主题

8

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2004-1-5 19:17:00 | 显示全部楼层

Re:关于Timer的误差

站上有关于这方面的文章的

0

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2004-1-17 18:31:00 | 显示全部楼层

Re:关于Timer的误差

x86上应该还是RDTSC精度最高了,而且在其它OS上也照样能用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 23:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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