www.pudn.com > LoginGate.rar > ThreadFuncForMsg.cpp
#include "stdafx.h" extern HWND g_hStatusBar; extern SOCKET g_csock; extern CWHQueue g_xMsgQueue; extern CWHListg_xSessionList; DWORD WINAPI ThreadFuncForMsg(LPVOID lpParameter) { char szData[DATA_BUFSIZE]; char szRemainData[DATA_BUFSIZE]; char *pszData; char *pszFirst, *pszEnd; int nCount = 0, nDataPos = 0, nRemainDataLen = 0, nRemain = 0; int nLoop; int nSocket; FILETIME ftKernelTimeStart, ftKernelTimeEnd; FILETIME ftUserTimeStart, ftUserTimeEnd; FILETIME ftDummy, ftTotalTimeElapsed; __int64 qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed; TCHAR wszThreadTime[32]; WSABUF Buf; DWORD dwSendBytes = 0; while (TRUE) { GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeStart, &ftUserTimeStart); if (g_fTerminated) return 0; nCount = g_xMsgQueue.GetCount(); nDataPos = 0; pszFirst = NULL; if (nCount) { if (nRemainDataLen) { memmove(szData, szRemainData, nRemainDataLen); nDataPos = nRemainDataLen; } for (nLoop = 0; nLoop < nCount; nLoop++) { pszData = (char *)g_xMsgQueue.PopQ(); if (!pszData) continue; if (pszFirst) { nRemain = memlen(pszFirst); if (nRemain) { memmove(szData, pszFirst, nRemain); nDataPos = 0; } } else nDataPos = 0; memmove((szData + nDataPos), pszData, memlen(pszData)); pszEnd = &szData[0]; while (TRUE) { if ((pszFirst = (char *)memchr(pszEnd, '%', memlen(pszEnd))) && (pszEnd = (char *)memchr(pszFirst, '$', memlen(pszFirst)))) { *pszEnd = '\0'; if (*(pszFirst + 1) == '+') { if (*(pszFirst + 2) == '-') InsertLogMsg(_TEXT("Kick User.")); else SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(2, 0), (LPARAM)_TEXT("Activation")); // Received keep alive check code from login server } else { if (pszEnd = strchr(pszFirst, '/')) { pszEnd++; if (nSocket = AnsiStrToVal(pszFirst + 1)) { Buf.len = memlen(pszEnd) - 1; Buf.buf = pszEnd; WSASend((SOCKET)nSocket, &Buf, 1, &dwSendBytes, 0, NULL, NULL); } } } } else break; } // while loop delete [] pszData; } // for loop if (pszFirst) { nRemain = memlen(pszFirst); if (nRemain) { memmove(szRemainData, pszFirst, nRemain); nRemainDataLen = nRemain; } else nRemainDataLen = 0; } } // if (nCount) GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeEnd, &ftUserTimeEnd); qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimeEnd) - FileTimeToQuadWord(&ftKernelTimeStart); qwUserTimeElapsed = FileTimeToQuadWord(&ftUserTimeEnd) - FileTimeToQuadWord(&ftUserTimeStart); qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed; QuadTimeToFileTime(qwTotalTimeElapsed, &ftTotalTimeElapsed); wsprintf(wszThreadTime, _TEXT("%u%u ns"), ftTotalTimeElapsed.dwHighDateTime, ftTotalTimeElapsed.dwLowDateTime); SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(4, 0), (LPARAM)wszThreadTime); SleepEx(1, TRUE); } return 0; }