阅读:1556回复:6
关于KeWaitForSingleObject 的问题??
我想在我驱动程序中是使用KeWaitForSingleObject 这个函数来等待数据,但是我希望使用一个超时,但是
KeWaitForSingleObject 不可以等待一个 非零值 在 IRQL = DISPATCH_LEVEL 时,是否除了延事,我就没有别的办法了。 请指教 |
|
沙发#
发布于:2003-06-18 12:05
优化你程序的流程,当Timeout为NULL时 KeWaitForSingleObject 可以在 IRQL <= DISPATCH_LEVEL 等待。
|
|
|
板凳#
发布于:2003-06-18 19:58
问题是:我就是想超时,等待一会儿,不行就退呀,不需要一直等待下去的,有什么好的办法呢?
|
|
地板#
发布于:2003-06-18 20:08
顺便问一下,如何类似WIN32那样,使用GetTickCount来获得当前的时间值,DDK中类似的函数叫什么?
KeDelayExecutionThread 这个函数只能在passive_level 运行,如果我想延时的话,我需要调用哪个函数? |
|
地下室#
发布于:2003-06-18 20:28
KeQueryTickCount, KeQuerySystemTime 之类的得到系统当前时间。
如果你一定要在 DISPACH_LEVEL 要等待超时的话,可以用 Timer 对象设定一个小的 dueTime,然后设一个循环啊。如果 < DISPACH_LEVEL 的话,那就有很多同步机制可以用了,Timer,Event 之类的。 LONG timeOut = 0; while (timeOut < TIMEOUT_VALUE) { WaitForSingleObject(...) } 其实我也是菜鸟了,不过刚开始也在考虑和你一样的问题。 :D :D |
|
5楼#
发布于:2003-06-18 20:29
KeQueryTickCount, KeQuerySystemTime 之类的得到系统当前时间。
如果你一定要在 DISPACH_LEVEL 要等待超时的话,可以用 Timer 对象设定一个小的 dueTime,然后设一个循环啊。如果 < DISPACH_LEVEL 的话,那就有很多同步机制可以用了,Timer,Event 之类的。 LONG timeOut = 0; while (timeOut < TIMEOUT_VALUE) { WaitForSingleObject(...); timeOut += 500; } 其实我也是菜鸟了,不过刚开始也在考虑和你一样的问题。 :D :D |
|
6楼#
发布于:2003-06-18 20:38
Thank you very much.
|
|