#include<iostream> #include <Netlistmgr.h> static bool checkIsNetwork() { Sleep(1000); CoInitialize(NULL); // 通過NLA接口獲取網絡狀態 IUnknown *pUnknown = NULL; BOOL bOnline = false; //是否在線 HRESULT Result = CoCreateInstance(CLSID_NetworkListManager, NULL, CLSCTX_ALL, IID_IUnknown, (void **)&pUnknown); //創建一個com對象 if (SUCCEEDED(Result)) { INetworkListManager *pNetworkListManager = NULL; if (pUnknown) Result = pUnknown->QueryInterface(IID_INetworkListManager, (void **)&pNetworkListManager); if (SUCCEEDED(Result)) { VARIANT_BOOL IsConnect = VARIANT_FALSE; if (pNetworkListManager) Result = pNetworkListManager->get_IsConnectedToInternet(&IsConnect); if (SUCCEEDED(Result)) { bOnline = (IsConnect == VARIANT_TRUE) ? true : false; } } if (pNetworkListManager) pNetworkListManager->Release(); } if (pUnknown) pUnknown->Release(); CoUninitialize(); return bOnline; } HANDLE g_hMutex = NULL; //線程函數 DWORD WINAPI ThreadProc(LPVOID lpParameter) { Sleep(1000); if (!checkIsNetwork()) { WaitForSingleObject(g_hMutex, INFINITE); //等待線程同步 std::cout << "網絡已斷開" << std::endl; ReleaseMutex(g_hMutex); //釋放互斥量 } else { WaitForSingleObject(g_hMutex, INFINITE); std::cout << "網絡正常" << std::endl; ReleaseMutex(g_hMutex); } return 0L; } int main() { g_hMutex = CreateMutex(NULL, FALSE, NULL);//創建互斥量 while (1) { Sleep(1000); //創建一個線程 HANDLE thread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); //關閉線程 CloseHandle(thread); } return 0; }
原文地址:https://blog.csdn.net/qq_31815979/article/details/105112948