akuan888
驱动牛犊
驱动牛犊
  • 注册日期2009-10-11
  • 最后登录2010-09-08
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1152回复:1

一个关于存储并转发数据包的疑难(与代码无关)

楼主#
更多 发布于:2009-10-11 10:49
本人想做一个网络过滤软件,现在遇到一个问题。

接收的数据包专门存放在一个队列中,另一个线程专门循环处理这个队列中的数据包。

当处理数据包的线程处理完了队列中的所有数据包后,必须进入等待状态,否则空循环肯定将CPU100%。

本来用了KeWaitForSingleObject来等待,等有数据包进队列时用事件通知。问题就在这里:

由于KeSetEvent发出后,KeWaitForSingleObject不能立即响应,它有一个查询时间,而这个时间就算是0.0001秒,也会导致数据包处理不及时。

因为,如果1秒收到20万数据包,则处理一个数据包的时间只有1/20万秒。

不知道有什么办法使等待立即响应?
Chequer
驱动牛犊
驱动牛犊
  • 注册日期2008-10-07
  • 最后登录2011-08-26
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-10-13 14:35
为什么要用thread呢?好好整理一下驱动架构,特别是NDIS驱动,其实很多情况下kernel mode thread是没有必要的。
游客

返回顶部