关于windows的pci驱动事件等待问题

时间:2022-03-28 21:22:32
pci驱动中,在线程中使用事件等待遇到一个问题请大家指教原因;
我创建一个线程,在线程中使用事件等待函数KeWaitForSingleObject等待时间为1毫秒,可是在同样的WIN7下,待等时间相差有10毫秒的差别。

LARGE_INTEGER waitTime;
waitTime.QuadPart  = -10*1000;或waitTime.QuadPart  = -10*100;
使用KeDelayExecutionThread(KernelMode,TRUE,&waitTime);
或使用
KeWaitForSingleObject(hExitEvent, Executive, KernelMode, FALSE,&waitTime);

在有些系统下等待为1秒钟只能等待10次,即10毫秒才会超时或触发一次。
或者使用定时器的时候,取值waitTime.QuadPart  = -10*1000;或waitTime.QuadPart  = -10*100;都是10毫秒才触发一次。
我希望能最少1毫秒就能触发一次或1毫秒能触发多次,但在同样的WIN7下面,有些系统却如我所愿。请问这是什么原因。请各位老师指点

7 个解决方案

#1


Windows 7不是实时操作系统。所以事件触发的时间不能精确到1ms或者10ms。

#2


不会吧,怎么我装其中一个系统一秒钟可触发1000次呢,如果我想在一个循环里(不使用中断)在驱动中读数据,一秒钟读一千次,应该如何实现。

#3


或者有没有办法达到毫秒级的等待,

#4


这个是不是和系统的时间片有关系?

#5


引用 4 楼 xuanyuan_zangge 的回复:
这个是不是和系统的时间片有关系?

个人觉得是这样的。线程/进程本身不能保证按时被调用,那么线程/进程里面的Event当然不能保证按时被调用。

#6


引用 5 楼 Huntercao 的回复:
Quote: 引用 4 楼 xuanyuan_zangge 的回复:

这个是不是和系统的时间片有关系?

个人觉得是这样的。线程/进程本身不能保证按时被调用,那么线程/进程里面的Event当然不能保证按时被调用。


那我如何能实现在驱动里等待时间在1毫秒左右(大概能这到个时间段,不需要很准时),在等待时而不占用CPU

#7


高优先级的硬件中断可以获取高精度的响应时间。

#1


Windows 7不是实时操作系统。所以事件触发的时间不能精确到1ms或者10ms。

#2


不会吧,怎么我装其中一个系统一秒钟可触发1000次呢,如果我想在一个循环里(不使用中断)在驱动中读数据,一秒钟读一千次,应该如何实现。

#3


或者有没有办法达到毫秒级的等待,

#4


这个是不是和系统的时间片有关系?

#5


引用 4 楼 xuanyuan_zangge 的回复:
这个是不是和系统的时间片有关系?

个人觉得是这样的。线程/进程本身不能保证按时被调用,那么线程/进程里面的Event当然不能保证按时被调用。

#6


引用 5 楼 Huntercao 的回复:
Quote: 引用 4 楼 xuanyuan_zangge 的回复:

这个是不是和系统的时间片有关系?

个人觉得是这样的。线程/进程本身不能保证按时被调用,那么线程/进程里面的Event当然不能保证按时被调用。


那我如何能实现在驱动里等待时间在1毫秒左右(大概能这到个时间段,不需要很准时),在等待时而不占用CPU

#7


高优先级的硬件中断可以获取高精度的响应时间。