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

📄 dbthread.cpp

📁 魔域源代码需要的可以学习一下真么这么麻烦啊
💻 CPP
字号:
// DBThread.cpp: implementation of the CDBThread class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MessagePort.h"
#include "MsgServer.h"
#include "I_Shell.h"
#include "protocol.h"
#include "DBThread.h"
#include "common.h"
#include "DBKernel/I_DBService.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDBThread::CDBThread(IMessagePort* pPort)
	: m_pDBService(NULL)
{
	ASSERT(pPort);
	m_pMsgPort		= pPort;
	m_tNextClock	= 0;
}

CDBThread::~CDBThread()
{
	SAFE_RELEASE (m_pDBService);
}

//////////////////////////////////////////////////////////////////////
// overload
//////////////////////////////////////////////////////////////////////
bool CDBThread::CreateThread(bool bRun /*= true*/)
{
	m_pDBService	= IDBService::CreateNew();
	if (m_pDBService)
	{
		if (!m_pDBService->Create(m_pMsgPort))
			return false;
	}

	if(!CThreadBase::CreateThread(bRun))
		return false;

	return true;
}

//////////////////////////////////////////////////////////////////////
void CDBThread::OnDestroy()
{
}

//////////////////////////////////////////////////////////////////////
void CDBThread::OnInit()	
{ 
	m_tNextClock = clock() + CLOCKS_PER_SEC; 
	char	szText[1024];
	sprintf(szText, "#%u: DB kernel thread running.", m_pMsgPort->GetID());
	m_pMsgPort->Send(MSGPORT_SHELL, SHELL_PRINTTEXT, STRING_TYPE(szText), szText);
}

//////////////////////////////////////////////////////////////////////
bool CDBThread::OnProcess()
{
	char	buf[MAX_MESSAGESIZE];
	CMessageStatus	cStatus;
	clock_t	clkStart = clock();

	DEBUG_TRY	// VVVVVVVVVVVVVV
	if(m_pMsgPort->Recv(PORT_ANY, PACKET_ANY, STRUCT_TYPE(buf), buf, &cStatus))
	{
		if(!m_pDBService->ProcessMsg(cStatus.m_nPacket, buf, cStatus.m_nVarType, cStatus.m_nPortFrom))
		{
			LOGERROR("m_pDBService->ProcessMsg内部消息出错");
//			return false;
		}
	}
	DEBUG_CATCH("CDBThread::OnProcess()")	// AAAAAAAAAAA

	clock_t	tCurr = clock();
	if(tCurr >= m_tNextClock)
	{
		m_tNextClock	+= WORLDKERNEL_ONTIMER_MS;

		// 自动修正
		{
			int nOffset	= (tCurr - m_tNextClock) / CLOCKS_PER_SEC;
			if(abs(nOffset) > TIMER_OFFSET_LIMIT)
			{
				m_tNextClock = tCurr + WORLDKERNEL_ONTIMER_MS;
				LOGWARNING("CDBThread::OnProcess() 时钟偏移%d秒,已自动修正。", nOffset);
			}
		}

		DEBUG_TRY
		m_pDBService->OnTimer(tCurr);
		DEBUG_CATCH("m_pDBService->OnTimer()")
	}

	{
/*
		// stat
		clock_t	 clkUsed	= clock() - clkStart;
		extern struct STAT_STRUCT	g_stat;
		InterlockedExchangeAdd(&g_stat.nAllWorldMS, clkUsed);
		InterlockedIncrement(&g_stat.nWorldTimes);
		if(g_stat.nMaxWorldMS < clkUsed)
			g_stat.nMaxWorldMS = clkUsed;
*/
	}
	DEBUG_TRY	// VVVVVVVVVVVVVV
	m_pMsgPort->WaitMsg(__min(THREADDELAY_MS, WORLDKERNEL_ONTIMER_MS));		// 响应“关闭线程消息”的频度
	DEBUG_CATCH("CDBThread::OnProcess(2)")	// AAAAAAAAAAA

	return true;
}

⌨️ 快捷键说明

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