阅读:2768回复:4
KeDelayExecutionThread的问题
NTSTATUS
KeDelayExecutionThread( IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Interval ); 帮助上说KeDelayExecutionThread这个函数可以精确定时到100ns 我把Interval设置为-1以后运行2000次(在一个循环里面) 在有的机子上好像正常工作(很快运行完)但是在有些机子上面要经过20多秒才返回,这是为什么阿? 还有如果驱动程序里面有一些简单的汇编语句 比如 asm { push eax push edx mov edx,portNum mov eax,0 in al,dx mov bit8V,al pop edx pop edx } 是不是不能跨硬件使用?(比如我在intel cpu的平台编译的,是不是不能再amd cpu的机子上使用?) |
|
沙发#
发布于:2002-11-26 09:40
我用过此涵数好象几万次都没问题,可能是你的循环中有问题要不看看?
|
|
板凳#
发布于:2002-11-27 14:52
函数没有问题, 你的ASM可能倒是有问题. 在不同用的优化状态下得到的结果不一定会和你需要的结果一至.关键是bit8V的变量问题.
|
|
|
地板#
发布于:2002-11-27 23:08
NTSTATUS 首先“精确定时到100ns”的理解有问题。另外“很快运行完”是多快?我的机器从来没有很快。 对我的2000而言(版本、硬件平台是否导致系统代码有所不同不能做保证,对此函数应该没什么影响),KeDelayExecutionThread会引发线程调度的发生,2000调度的条件你应该清楚了,正常情况(未调整、没线程主动放弃cpu)下10ms之后发生,所以2000*10ms=20s是正常的。 |
|
地下室#
发布于:2002-11-28 08:52
补充一点的是,此函数可能会自动改变Resolution(没细看),不过最小仅达1ms,所以我这里2000次是2s。你设-1与-10000效果基本该一样。 |
|