阅读:1582回复:4
请问,在wdm中大家都用什么延时呢?
我担心,在一般应用程序中的延时函数不能用,即使能用,也不知道是不是稳定,所以想问大家都是怎么延时的?最好能给出例子,谢谢
|
|
沙发#
发布于:2003-01-16 19:03
我担心,在一般应用程序中的延时函数不能用,即使能用,也不知道是不是稳定,所以想问大家都是怎么延时的?最好能给出例子,谢谢 1,for循环,,,,可以,,, 2,KeDelayExecutionThread( KernelMode, FALSE, &DelayTimeout); 3,KeStallExecutionProcessor(50); 比如,, //向控制寄存器复位标志位置位 m2d_wh(CHIP_CONTROL,(USHORT)(cdata | 0x0004));//Reset //你想要的延迟,,因为芯片复位需要时间... KeDelayExecutionThread( KernelMode, FALSE, &DelayTimeout); //继续对其他寄存器配置... m2d_wh(CHIP_CONTROL,(USHORT)(cdata & 0xFFF0));//unknown KeStallExecutionProcessor(50); |
|
板凳#
发布于:2003-01-16 19:08
[quote]我担心,在一般应用程序中的延时函数不能用,即使能用,也不知道是不是稳定,所以想问大家都是怎么延时的?最好能给出例子,谢谢 1,for循环,,,,可以,,, 2,KeDelayExecutionThread( KernelMode, FALSE, &DelayTimeout); 3,KeStallExecutionProcessor(50); 比如,, //向控制寄存器复位标志位置位 m2d_wh(CHIP_CONTROL,(USHORT)(cdata | 0x0004));//Reset //你想要的延迟,,因为芯片复位需要时间... KeDelayExecutionThread( KernelMode, FALSE, &DelayTimeout); //继续对其他寄存器配置... m2d_wh(CHIP_CONTROL,(USHORT)(cdata & 0xFFF0));//unknown KeStallExecutionProcessor(50); [/quote] 我想向你提醒第一和第三个方法的缺点.... 第一个如果换了cpu,,延时就会不一样,,,, 至于第三个,,,时间太短,,,,小于一个滴答... |
|
地板#
发布于:2003-01-22 12:41
第三种停顿cpu的处理,不好,ddk不建议频繁使用,做好是用2 但是要注意DelayTimeout为负值 |
|
|
地下室#
发布于:2003-01-23 09:25
这是我用的一个延时例程:
参数为毫秒数! VOID Sleep(U32 time) { LARGE_INTEGER liTime; /* Convert milliseconds to 100-nanosecond increments using: * * 1 ns = 10 ^ -9 sec * 100 ns = 10 ^ -7 sec (1 timer interval) * 1 ms = 10 ^ -3 sec * 1 ms = (1 timer interval) * 10^4 */ time = time * 10000; // Negative value means relative time, not absolute liTime = RtlConvertLongToLargeInteger(-(LONG)time); KeDelayExecutionThread(KernelMode, TRUE, &liTime); } |
|