void CMonitor::OnGetStatus() { CString strName; int iMax = m_SockArray.GetSize(); for (int iSelection = 0; iSelection < iMax; ++iSelection) { CString * pDataString = GetDataString(iSelection); CProgressCtrl * pProgressCtrl = GetProcessorProgressCtrl(iSelection); CProgressCtrl * pMemoryProgressCtrl = GetMemoryProgressCtrl(iSelection); *pDataString = "Getting Data"; UpdateData(FALSE); SOCKET socket = m_SockArray[iSelection]; if (socket) { int iReturn = 0; DWORD dwProcessor = 1; LONG lProcessorUsage = 0; LONG lMemoryUsage = 0; char Message[1024]; pDataString = GetDataString(iSelection); if (!pDataString) ExitThread(0); iReturn = send(socket, (char*)&dwProcessor, sizeof(DWORD), 0); if (iReturn == SOCKET_ERROR) { iReturn = WSAGetLastError(); translate_WSAErrorCode(iReturn, Message); strcpy(pDataString->GetBuffer(256), "--"); closesocket(socket); socket = 0; m_SockArray[iSelection] = socket; } #define MAX_RETRIES 1500 int iNameLength = 0; iReturn = 0; while (SOCKET_ERROR == recv(socket, (char*)&iNameLength, sizeof(int), 0)) { if ((WSAGetLastError() != WSAEWOULDBLOCK)) { closesocket(socket); socket = 0; m_SockArray[iSelection] = socket; iReturn = WSAGetLastError(); break; } else { if (iReturn == MAX_RETRIES+1) { break; } ++iReturn; Sleep(100); } } iReturn = 0; LPTSTR pNameString = strName.GetBuffer(iNameLength); while (SOCKET_ERROR == recv(socket, pNameString, iNameLength, 0)) { if ((WSAGetLastError() != WSAEWOULDBLOCK)) { closesocket(socket); socket = 0; m_SockArray[iSelection] = socket; iReturn = WSAGetLastError(); break; } else { if (iReturn == MAX_RETRIES+1) { break; } ++iReturn; Sleep(100); } } strName.ReleaseBuffer(); CString * pStringName = GetString(iSelection); *pStringName = strName; iReturn = 0; while (SOCKET_ERROR == recv(socket, (char*)&lProcessorUsage, sizeof(LONG), 0)) { if ((WSAGetLastError() != WSAEWOULDBLOCK)) { closesocket(socket); socket = 0; m_SockArray[iSelection] = socket; iReturn = WSAGetLastError(); break; } else { if (iReturn == MAX_RETRIES+1) { break; } ++iReturn; Sleep(100); } } iReturn = 0; while (SOCKET_ERROR == recv(socket, (char*)&lMemoryUsage, sizeof(LONG), 0)) { if ((WSAGetLastError() != WSAEWOULDBLOCK)) { closesocket(socket); socket = 0; m_SockArray[iSelection] = socket; iReturn = WSAGetLastError(); break; } else { if (iReturn == MAX_RETRIES+1) { break; } ++iReturn; Sleep(100); } } if (iReturn == MAX_RETRIES+1) strcpy(pDataString->GetBuffer(256), "Failed"); else { if ((lProcessorUsage > 100)) { strcpy(pDataString->GetBuffer(256), "Closed"); closesocket(socket); socket = 0; } else { if (socket) { sprintf(pDataString->GetBuffer(256), "%d%%", lProcessorUsage); if (pProgressCtrl) pProgressCtrl->SetPos(lProcessorUsage); if (pMemoryProgressCtrl) pMemoryProgressCtrl->SetPos(lMemoryUsage); } else sprintf(pDataString->GetBuffer(256), "WSA%d", iReturn); } } pDataString->ReleaseBuffer(); } } UpdateData(FALSE); }