实战经验:通过NotifyAddrChange侦测网络变化( 六 )

2) 应用程序退出

当整个应用程序退出时 , 系统会帮我们自动取消 , 但最好还是由我们显式取消比较好 。 这样做的好处是可以避免工作线程被强制终止而造成资源泄漏 。

侦测到IP地址变化后应该怎么做

NotifyAddrChange只是简单的告诉我们系统的IP地址发生了变化 , 但是具体是怎样变化 , 我们无法从此函数调用中得到 。 这个时候 , 我们可以使用GetAdaptersAddresses这一函数来得到当前最新的IP地址来判断 。

好了 , 我们来看看具体的示例代码 , 此代码来自MSDN 。

程序架构注意点

对于一个图形界面程序来说 , 如果将NotifyAddrChange放置到主线程 , 则会导致主线程阻塞界面卡死 。 那么我们在程序架构阶段 , 将NotifyAddrChange安排到一个工作线程中 , 当系统侦测到IP地址变化 , 工作线程会得到此通知 , 进而通过窗口句柄来通知主线程 。

示例流程图如下

推荐阅读