⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadfuncformsg.cpp

📁 此为传奇游戏源代码
💻 CPP
字号:
#include "stdafx.h"

extern HWND								g_hStatusBar;

extern SOCKET							g_csock;

extern CWHQueue							g_xMsgQueue;
extern CWHList<CSessionInfo*>			g_xSessionList;

extern BOOL								g_fTerminated;

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);
//									send((SOCKET)nSocket, pszEnd, memlen(pszEnd) - 1, 0);
								}
							}
						}
					}
					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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -