azure
驱动牛犊
驱动牛犊
  • 注册日期2001-03-29
  • 最后登录2007-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2430回复:11

WDM驱动有什么时间函数的精度能达到1ms?

楼主#
更多 发布于:2002-07-18 14:15
在VxD中,Get_System_Time精度为1ms,而我在WMD中没有找到。
下面试过的两个都不行:(
PcGetTimeInterval()函数刷新精度为5ms
KeQuerySystemTime()函数刷新速度更慢,我的机器上是13.7ms。

有什么刷新速度在1ms的时间函数吗?

谢谢!

最新喜欢:

kxgchinakxgchi...
zhifeng
驱动牛犊
驱动牛犊
  • 注册日期2001-12-28
  • 最后登录2008-07-23
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-26 09:20
我也在找这种方案,一直没有结果
zhifeng
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-26 10:00
KeInitializeTimer initializes a timer object.
KeSetTimer sets the absolute or relative interval at which a timer object is to be set to a signaled state and, optionally, supplies a CustomTimerDpc routine to be executed when that interval expires.

The expiration time is expressed in system time units (100-nanosecond intervals).
wangxdong
驱动小牛
驱动小牛
  • 注册日期2002-07-08
  • 最后登录2003-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-26 18:00
DriverStudio的帮助中提过一句,定时精度不保证好于10ms,所以你1ms的要求太高了
请多多指教!
azure
驱动牛犊
驱动牛犊
  • 注册日期2001-03-29
  • 最后登录2007-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-26 19:03
我现在用的办法是用ExSetTimerResolution()调整Timer的时间粒度为1ms,然后启动Timer,用CustomTimerDpc计数。在98下效果比较好,在2000下,系统很忙的时候平均误差会达到2ms。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-07-26 19:11
KeDelayExecutionThread routine puts the current thread into an alertable or nonalertable wait state for a given interval.

也是以100ns为粒度。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-07-26 19:14
KeStallExecutionProcessor stalls the caller on the current processor for the given interval.
以1ms为单位,不过不知道精度。
azure
驱动牛犊
驱动牛犊
  • 注册日期2001-03-29
  • 最后登录2007-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-27 05:37
谢谢arthurtu!
不过,我试了KeDelayExecutionThread(),设置超时参数为1ms,实际超时时间为1.937ms。这个精度和KeTimer基本一致。好多有关时间的函数都是以100ns为单位,不过,100ns也只是单位而已,这些函数执行时的实际粒度都远远大于它们的单位:(

[编辑 -  7/27/02 by  azure]
azure
驱动牛犊
驱动牛犊
  • 注册日期2001-03-29
  • 最后登录2007-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-27 05:53
KeStallExecutionProcessor()的时间单位是微秒,而且停止的时间不得超过50us。估计这个函数是用独占CPU的循环来完成短时间延时的。
zcom19
驱动牛犊
驱动牛犊
  • 注册日期2004-05-10
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-11 09:36
软件不行就用硬件吗
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2005-02-22 11:44
这个问题确实头痛,各位大大现在有好办法了没?
daemon-tools 采用backdoor dpc 的方式可以达到1ms的精度,可是偶不知其如何实现滴。。。。。。
纯软件要实现1ms级别的精确定时真麻烦呀。
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2005-02-22 17:20
我现在用的办法是用ExSetTimerResolution()调整Timer的时间粒度为1ms,然后启动Timer,用CustomTimerDpc计数。在98下效果比较好,在2000下,系统很忙的时候平均误差会达到2ms。


daemon-tools 就是用的这个函数实现1ms定时的,靠,函数的Export Table 被它修改了。看了大峡的说明一试发现就是这个拉,谢谢!
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
游客

返回顶部