|
本人想做一个网络过滤软件,现在遇到一个问题。
接收的数据包专门存放在一个队列中,另一个线程专门循环处理这个队列中的数据包。
当处理数据包的线程处理完了队列中的所有数据包后,必须进入等待状态,否则空循环肯定将CPU100%。
本来用了KeWaitForSingleObject来等待,等有数据包进队列时用事件通知。问题就在这里:
由于KeSetEvent发出后,KeWaitForSingleObject不能立即响应,它有一个查询时间,而这个时间就算是0.0001秒,也会导致数据包处理不及时。
因为,如果1秒收到20万数据包,则处理一个数据包的时间只有1/20万秒。
不知道有什么办法使等待立即响应?
|
|