wxy2ab
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2767回复:4

KeDelayExecutionThread的问题

楼主#
更多 发布于:2002-11-25 22:01
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的机子上使用?)
zhanSL
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-07-13
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望273点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-26 09:40
我用过此涵数好象几万次都没问题,可能是你的循环中有问题要不看看?
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-27 14:52
函数没有问题, 你的ASM可能倒是有问题. 在不同用的优化状态下得到的结果不一定会和你需要的结果一至.关键是bit8V的变量问题.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-27 23:08
NTSTATUS
  KeDelayExecutionThread(
  IN KPROCESSOR_MODE  WaitMode,
  IN BOOLEAN  Alertable,
  IN PLARGE_INTEGER  Interval
  );
帮助上说KeDelayExecutionThread这个函数可以精确定时到100ns
我把Interval设置为-1以后运行2000次(在一个循环里面)
在有的机子上好像正常工作(很快运行完)但是在有些机子上面要经过20多秒才返回,这是为什么阿?
 


首先“精确定时到100ns”的理解有问题。另外“很快运行完”是多快?我的机器从来没有很快。
对我的2000而言(版本、硬件平台是否导致系统代码有所不同不能做保证,对此函数应该没什么影响),KeDelayExecutionThread会引发线程调度的发生,2000调度的条件你应该清楚了,正常情况(未调整、没线程主动放弃cpu)下10ms之后发生,所以2000*10ms=20s是正常的。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-28 08:52

首先“精确定时到100ns”的理解有问题。另外“很快运行完”是多快?我的机器从来没有很快。
对我的2000而言(版本、硬件平台是否导致系统代码有所不同不能做保证,对此函数应该没什么影响),KeDelayExecutionThread会引发线程调度的发生,2000调度的条件你应该清楚了,正常情况(未调整、没线程主动放弃cpu)下10ms之后发生,所以2000*10ms=20s是正常的。


补充一点的是,此函数可能会自动改变Resolution(没细看),不过最小仅达1ms,所以我这里2000次是2s。你设-1与-10000效果基本该一样。
游客

返回顶部