meffee
游客
游客
阅读:5828回复:5

请问:关于KeSetTimer(...)的定时精度?

楼主#
更多 发布于:2001-05-17 15:59
被这个问题折腾坏了。我想要做一个纯软件的东西,使用Win2000的DDK,目的是准确的产生几个频率值,频率倒是不高,10个HZ左右,但是对精度要求比较高,千分之一左右,这样对定时器的精度就比较严格了,不知道有没有谁使用过这个定时器函数,我用过以后发现,虽然微软在这里带有欺骗性地说DueTime的单位是100ns,但是精度也就1ms而已,低于1ms根本就不准,而且这两天似乎1ms都不准了。使用过的大虾或者有经验者请指教!多谢了!

最新喜欢:

jljjlj
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-05-17 16:21
KeSetTimer的精度达不到100ns,它的精度你可以用KeQueryPerformanceCounter()来测试。
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-05-17 16:32
我感觉KeSetTimer的精度在10ms左右,所以,使用KeSetTimer是不行的啦。
不知道你的程序允许不允许用轮询的方式来实现这个时钟,如果可以的话,可以在一个循环里不停的调用下面的函数直到超时再调用相关处理函数。
ULONG QuerySystemTime()
{
LARGE_INTEGER CurTime, Freq;
CurTime = KeQueryPerformanceCounter(&Freq);
return (ULONG)((CurTime.QuadPart * 1000)/Freq.QuadPart);
}
这个函数的精度为1ms,稍加修改,应该可以有更高的精度。

rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-05-17 21:27
[QUOTE]原本由 lao_o 发表
[B]我感觉KeSetTimer的精度在10ms左右,所以,使用KeSetTimer是不行的啦。
不知道你的程序允许不允许用轮询的方式来实现这个时钟,如果可以的话,可以在一个循环里不停的调用下面的函数直到超时再调用相关处理函数。
ULONG QuerySystemTime()
{
LARGE_INTEGER CurTime, Freq;
CurTime = KeQueryPerformanceCounter(&Freq);
return (ULONG)((CurTime.QuadPart * 1000)/Freq.QuadPart);
}
这个函数的精度为1ms,稍加修改,应该可以有更高的精度。

 [/B][/QUOTE]
在WDM里面?你在哪个函数里轮询?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
spacewolf
驱动牛犊
驱动牛犊
  • 注册日期2009-04-14
  • 最后登录2009-04-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-04-14 20:14
经过精确测试,该函数定时精度为15.625ms,而且以15.625ms为单位
spacewolf
驱动牛犊
驱动牛犊
  • 注册日期2009-04-14
  • 最后登录2009-04-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-04-14 20:19
8HZ,16HZ---64HZ是可以精确实现的,其精度就是15.625ms,但是15.625也是很准确的,误差在1us之内

如果哪位高手有更高精度的定时器,不妨提供出来。

PS:有没有通过QuerySystemTime()来设计一个定时器的?
游客

返回顶部