NotifyRouteChange
路由变化通知,网上说,网络通断时,路由表会发生变化,将会有通知发生.这种说法对吗?
基于这种说法,我建立了一个监测网络通断的线程,没有达到预期的效果://主线程
{
HANDLE handle = ::CreateThread(0, 0, WaitForEvent, (LPVOID)m_hWnd, 0, 0);
::CloseHandle(handle);
}
//监听线程
DWORD WINAPI WaitForEvent(LPVOID lpParam)
{
HANDLE handle = WSACreateEvent();
OVERLAPPED overlap;
overlap.hEvent = handle;
while (1)
{
HANDLE h2;
::NotifyRouteChange(&h2, &overlap);
if (WaitForSingleObject(h2, INFINITE) == WAIT_OBJECT_0)
{
::SendMessage((HWND)lpParam, WM_NETWORKCHANGED, 0, 0);
}
}
return 0;
}结果不管网络通断与否,都没有收到自定义消息:WM_NETWORKCHANGED

解决方案 »

  1.   

    http://social.msdn.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/1ef5f70c-e9b6-4e29-9c47-b7ac52424094
      

  2.   


    //主线程
    {
    HANDLE handle = ::CreateThread(0, 0, WaitForEvent, (LPVOID)m_hWnd, 0, 0);
    ::CloseHandle(handle);
    }
    //监听线程
    DWORD WINAPI WaitForEvent(LPVOID lpParam)
    {
    while (1)
    {
    if (::NotifyRouteChange(NULL, NULL) == NO_ERROR)
    {
    ::SendMessage((HWND)lpParam, WM_NETWORKCHANGED, 0, 0);
    }
    }
    return 0;
    }这样简单的监视就行,只不过这个是"路由变化通知",在禁用\启用网卡,或网线插入\拔出时才会有这个通知,我IP变化时,不会有.