阅读:1427回复:8
为什么在系统开辟的线程里不能实现延时操作
我用DS写的驱动,开辟了一个系统线程,想在系统线程里实现延时操作,在设备的头文件里定义了设备类的成员变量 KTimer *timer; 然后在驱动的入口点,初始化函数里初始化该定时器,能成功。在系统线程里,我调用KTimer 的的成员函数Set( ),然后调用 Wait() 来完成延时操作,但就是不起作用,我把同样的代码放在驱动入口点的初始化部分来执行,能成功延时。
不知道这是为什么,难道在系统线程里不能实现延时操作?? |
|
|
沙发#
发布于:2003-09-15 09:19
怎么没人回答啊,很难吗?
|
|
|
板凳#
发布于:2003-09-15 17:57
等的很着急,真的没人会??
顶!!! |
|
|
地板#
发布于:2003-09-16 08:16
早上又运行了一遍程序,还是在系统线城里不能延时,同样的语句在驱动入口点就能成功地延时。
这是为什么呢?我看了很多驱动的资料,都没说这些。 彷徨中! |
|
|
地下室#
发布于:2003-09-17 15:12
这个问题怎么没人回答啊,等的很着急啊!
|
|
|
5楼#
发布于:2003-09-18 11:27
我换一个方法,在DS里使用DDK的函数:NTSTATUS
KeDelayExecutionThread( IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Interval ); 里面的三个参数分别是选择:内核模式,FALSE,时间定义为-1500000,因为单位是0。1微秒,所以应当是延时150毫秒,但时间程序执行后看到的显示信息是有时候延时32ms,有时候延时47ms,函数返回状态成功。为什么会出现这种情况? |
|
|
6楼#
发布于:2003-09-19 08:35
问题解决了,需要一个把时间转换成LARGE_INTER类型的函数。可惜有分放不出去了!
grant过来啊,把分给你。 |
|
|
7楼#
发布于:2003-09-29 15:03
还有一个keStall......啥的 :D
|
|
|
8楼#
发布于:2003-10-04 22:21
我也遇到同样的问题,时间轮询的,用下楼上的方法看看。
KeStallExecutionProcessor |
|
|