阅读:1152回复:1
一个关于存储并转发数据包的疑难(与代码无关)
本人想做一个网络过滤软件,现在遇到一个问题。
接收的数据包专门存放在一个队列中,另一个线程专门循环处理这个队列中的数据包。 当处理数据包的线程处理完了队列中的所有数据包后,必须进入等待状态,否则空循环肯定将CPU100%。 本来用了KeWaitForSingleObject来等待,等有数据包进队列时用事件通知。问题就在这里: 由于KeSetEvent发出后,KeWaitForSingleObject不能立即响应,它有一个查询时间,而这个时间就算是0.0001秒,也会导致数据包处理不及时。 因为,如果1秒收到20万数据包,则处理一个数据包的时间只有1/20万秒。 不知道有什么办法使等待立即响应? |
|
沙发#
发布于:2009-10-13 14:35
为什么要用thread呢?好好整理一下驱动架构,特别是NDIS驱动,其实很多情况下kernel mode thread是没有必要的。
|
|