阅读:1913回复:8
请问做window的定时程序能否达到纳秒级
我想用打印口定时采样红外接收头的数据。如果采用gettickcount来定时只能精确到毫秒,而红外遥控的速度显然比1毫秒要快。请问有没有精确一点的定时方法?
|
|
沙发#
发布于:2004-11-05 20:41
The KeDelayExecutionThread routine puts the current thread into an alertable or nonalertable wait state for a given interval.
NTSTATUS KeDelayExecutionThread( IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Interval ); Parameters WaitMode Specifies the processor mode in which the caller is waiting, which can be either KernelMode or UserMode. Lower-level drivers should specify KernelMode. Alertable Specifies TRUE if the wait is alertable. Lower-level drivers should specify FALSE. Interval Specifies the absolute or relative time, in units of 100 nanoseconds, for which the wait is to occur. A negative value indicates relative time. Absolute expiration times track any changes in system time; relative expiration times are not affected by system time changes. |
|
|
板凳#
发布于:2004-11-06 01:13
我想用打印口定时采样红外接收头的数据。如果采用gettickcount来定时只能精确到毫秒,而红外遥控的速度显然比1毫秒要快。请问有没有精确一点的定时方法? 在app中几乎不可能做到毫秒(不论Sleep还是WaitForSingleObject等都不能达到),除非循环查询,这时cpu使用率100% |
|
|
地板#
发布于:2004-11-08 09:12
循环查询也没用,即使在汇编指令级也做不到,不知道在CPU核心的MICRO CODE行不行......
|
|
|
地下室#
发布于:2004-11-08 10:30
是的,严格的讲循环查询也没用,因为Windows是多任务的,你不可能只run一个线程(因为OS本身就有很多),所以在线程切换时肯定不能做到
|
|
|
5楼#
发布于:2004-11-08 13:55
单纯一点,提升IRQL,取时间。
|
|
6楼#
发布于:2004-11-09 16:19
我只要分 OK?
|
|
|
7楼#
发布于:2004-11-10 20:23
硬实时操作系统也达不到纳秒级精度,微秒还差不多
|
|
8楼#
发布于:2004-11-12 22:08
楼上说的没错,只能达到微妙,你有没有计算一下你的CPU主频周期是多少?你可能定的时间比它还小么?
|
|