在典型的nw应用程序中,为什么我们需要NotifyRouteChange

时间:2015-02-19 08:42:21

标签: windows winapi networking windows-7 windows-networking

我有一个应用程序,它注册NotifyRouteChange()并等待异步调用。我们知道,根据Windows操作系统的路由表更改,将回调此API。我需要更多关于Windows触发此功能的信息吗?

在我的一个环境Win 7 Professional中,我在一秒钟内收到100个IP地址更改通知。如何减少它?

谢谢, Saravana

2 个答案:

答案 0 :(得分:0)

似乎是一个环境问题。

我用过

   ret = NotifyAddrChange(handle, &overlap);
   ret = NotifyRouteChange(handle, &overlap)); 

然后有一个回调函数来监控这些注册,如果IP地址/路由有任何变化,这些回调已经启动。 并且这些回调函数已将这些通知传递给我的其他线程进行处理,并再次注册相同的API。

在所有机器中都没有出现此问题,但在特定环境中。我有网络,不会引发任何问题。

答案 1 :(得分:0)

使用等待计时器来抑制事件,以便在最后一次NW更改事件发生后的最短时间后触发事件处理程序:

基本上,当您收到地址/路线更改事件时:

  1. 设置一个等待计时器(5秒)(SetWaitableTimer)
  2. 每当地址/路线事件发出信号时,取消现有的等待计时器(CancelWaitableTimer)并转到1。
  3. 如果发出等待时间信号,则表示在过去5秒内未发生地址/路线更改事件。在这里调用你的NW变更处理程序。