阅读:2430回复:11
WDM驱动有什么时间函数的精度能达到1ms?
在VxD中,Get_System_Time精度为1ms,而我在WMD中没有找到。
下面试过的两个都不行:( PcGetTimeInterval()函数刷新精度为5ms KeQuerySystemTime()函数刷新速度更慢,我的机器上是13.7ms。 有什么刷新速度在1ms的时间函数吗? 谢谢! |
|
最新喜欢:kxgchi... |
沙发#
发布于:2002-07-26 09:20
我也在找这种方案,一直没有结果
|
|
|
板凳#
发布于: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). |
|
地板#
发布于:2002-07-26 18:00
DriverStudio的帮助中提过一句,定时精度不保证好于10ms,所以你1ms的要求太高了
|
|
|
地下室#
发布于:2002-07-26 19:03
我现在用的办法是用ExSetTimerResolution()调整Timer的时间粒度为1ms,然后启动Timer,用CustomTimerDpc计数。在98下效果比较好,在2000下,系统很忙的时候平均误差会达到2ms。
|
|
5楼#
发布于:2002-07-26 19:11
KeDelayExecutionThread routine puts the current thread into an alertable or nonalertable wait state for a given interval.
也是以100ns为粒度。 |
|
6楼#
发布于:2002-07-26 19:14
KeStallExecutionProcessor stalls the caller on the current processor for the given interval.
以1ms为单位,不过不知道精度。 |
|
7楼#
发布于:2002-07-27 05:37
谢谢arthurtu!
不过,我试了KeDelayExecutionThread(),设置超时参数为1ms,实际超时时间为1.937ms。这个精度和KeTimer基本一致。好多有关时间的函数都是以100ns为单位,不过,100ns也只是单位而已,这些函数执行时的实际粒度都远远大于它们的单位:( [编辑 - 7/27/02 by azure] |
|
8楼#
发布于:2002-07-27 05:53
KeStallExecutionProcessor()的时间单位是微秒,而且停止的时间不得超过50us。估计这个函数是用独占CPU的循环来完成短时间延时的。
|
|
9楼#
发布于:2004-05-11 09:36
软件不行就用硬件吗
|
|
10楼#
发布于:2005-02-22 11:44
这个问题确实头痛,各位大大现在有好办法了没?
daemon-tools 采用backdoor dpc 的方式可以达到1ms的精度,可是偶不知其如何实现滴。。。。。。 纯软件要实现1ms级别的精确定时真麻烦呀。 |
|
|
11楼#
发布于:2005-02-22 17:20
我现在用的办法是用ExSetTimerResolution()调整Timer的时间粒度为1ms,然后启动Timer,用CustomTimerDpc计数。在98下效果比较好,在2000下,系统很忙的时候平均误差会达到2ms。 daemon-tools 就是用的这个函数实现1ms定时的,靠,函数的Export Table 被它修改了。看了大峡的说明一试发现就是这个拉,谢谢! |
|
|