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

📄 cmpqueue.cpp

📁 Soul的源代码,类似于劲舞团之类的游戏
💻 CPP
字号:
#include <windows.h>

#include "CMPqueue.h"

using namespace MatrixCore::Network;


//HANDLE	hPushEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 
#define QUEUESIZE 300000

/////////////////////////////////////////////////////////////////////////////////////////////////
//
//
/////////////////////////////////////////////////////////////////////////////////////////////////
//class CMPackQueue : public CMObject
//{
//private:
//	struct _QUEUE_DATA
//	{
//		int iNum;
//		T	Temp;
//	};
//	
//	CRITICAL_SECTION m_PushCS;
//	CRITICAL_SECTION m_PopCS;
//	_QUEUE_DATA* m_pBuf;
//	_QUEUE_DATA* m_pHeadPos;				// 单捞鸥啊 唱哎荐 乐绰 器牢磐.
//	_QUEUE_DATA* m_pTailPos;				// 单捞鸥啊 甸绢 哎荐 乐绰 器牢磐.
//	volatile long		m_nPackSize;        // 单捞鸥啊 割俺 甸绢 乐绰瘤. 
//	INT		m_nHead, m_nTail;				// 庆歹客 部府狼 惑措利 困摹蔼
//public:
//			CMPackQueue();
//	virtual ~CMPackQueue();
//
//			BOOL	push( T* pPushData ) throw( CMPackQueueAbortException* );
//			BOOL	pop( T* pPopData ) throw( CMPackQueueAbortException* );
//			BOOL	isEmpty();
//			VOID	empty();
//			inline	INT		size() { return m_nPackSize; }
//};

//-------------------------------------------------------------------------------------------------------
//	Name		 :: CMPQueue()
//	Create Date	 :: 2003/12/17
//	Description	 :: 积己磊
//	param		 ::
//	Return Value :: 
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
CMPQueue::CMPQueue()
{
	m_pBuf = (_PointData *) new _PointData[QUEUESIZE];
	
	if( m_pBuf == NULL)
	{
		//::MessageBox
		return ;
	} 

	for(int i = 0; i < QUEUESIZE ; i++)
	{
		m_pBuf[i].iNum = i;
		m_pBuf[i].iSize = 0;
		memset(&m_pBuf[i].pPointData,0,sizeof(m_pBuf[i].pPointData));
	}

	m_pHeadPos = m_pBuf;
	m_pTailPos = m_pBuf;

	m_nPackSize = 0;

	//农府萍拿 冀记 檬扁拳.
	InitializeCriticalSection(&m_PushCS);
	InitializeCriticalSection(&m_PopCS);
}

//-------------------------------------------------------------------------------------------------------
//	Name		 :: ~CMPQueue()
//	Create Date	 :: 2003/12/17
//	Description	 :: 家戈磊
//	param		 ::
//	Return Value :: 
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
CMPQueue::~CMPQueue()
{
	DeleteCriticalSection(&m_PushCS);
	DeleteCriticalSection(&m_PopCS);
}


//-------------------------------------------------------------------------------------------------------
//	Name		 :: PointPush()
//	Create Date	 :: 2003/12/17
//	Description	 :: 钮俊 单捞鸥甫 笼绢持绰促.
//	param		 ::	
//			void* pPushData :	void 器牢磐屈
//			int	  iSize		:	菩哦 辨捞..
//	Return Value :: 力措肺 甸绢啊搁 TRUE 
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
BOOL CMPQueue::PointPush(SOCKET s,void* pPushData , int iSize )
{

	__try {
		EnterCriticalSection( &m_PushCS );
		m_pTailPos->pPointData = pPushData;
		m_pTailPos->s =	s;
		m_pTailPos->iSize = iSize;

		m_nTail = m_pTailPos->iNum;

		//钮 付瘤阜俊 持菌促 促矫 贸澜何磐 笼绢 持绰促..
		if(m_nTail == QUEUESIZE-1)
		{
			m_pTailPos = m_pBuf;
			m_nTail = 0;
		}
		else
		{
			// 促澜俊 持阑荐 困摹肺 器牢磐 捞悼
            m_pTailPos++;
		}
		// 滴俺 鞍捞 遏 吧府绰 何盒 吝夸
		InterlockedIncrement(&m_nPackSize);
//		if(InterlockedCompareExchange(&m_nPackSize,1,1) == 1)
//          SetEvent(hPushEvent);

	}

	__finally
	{
		LeaveCriticalSection( &m_PushCS );
	}


	return TRUE;
}



//-------------------------------------------------------------------------------------------------------
//	Name		 :: PointPop()
//	Create Date	 :: 2003/12/17
//	Description	 :: 钮俊辑 扑阑 茄促.
//	param		 ::	
//	Return Value :: 镜荐 乐绰 钮甫 哗辰促. 
//					(林狼!) 咯扁辑 钮甫 波辰促绊 钮俊 单捞鸥啊 绝绢瘤瘤 臼绰促.
//					弊钮甫 馆券 沁阑锭 钮俊 单捞鸥啊 扑等促.
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
_PointData* CMPQueue::PointPop()
{
	_PointData *PopData ;
	__try {
		EnterCriticalSection( &m_PopCS );
		if(InterlockedCompareExchange(&m_nPackSize,0,0) == 0)
		{
//			WaitForSingleObjectEx(hPushEvent,INFINITE,FALSE);
//			::ResetEvent(hPushEvent);
			::Sleep(1);	// 荤侩磊 单捞鸥啊 拌加 绝阑锭 檬寸 500锅沥档 倒歹焙 -_-;;
			return NULL;
		}
		
		//PopData.pPointData = m_pHeadPos->pPointData;
		////memcpy(pPopData,&m_pHeadPos->pPointData,sizeof(T));
		////strcpy(pPopData,&m_pHeadPos->Temp);
		//PopData.iNum = m_nHead = m_pHeadPos->iNum;
		//PopData.iSize = m_pHeadPos->iSize;
		
		PopData = m_pHeadPos;

		//钮 付瘤阜俊辑 佬菌促 促矫 贸澜何磐 笼绢 持绰促..
		if(m_nHead == QUEUESIZE-1)
		{
			m_pHeadPos = m_pBuf;
			m_nHead = 0;
		}
		else
		{
			// 促澜俊 持阑荐 困摹肺 器牢磐 捞悼
            m_pHeadPos++;
			m_nHead++;
		}
        
		// 滴俺 鞍捞 遏 吧府绰 何盒 吝夸
		::InterlockedDecrement(&m_nPackSize);

	}

	__finally
	{
		LeaveCriticalSection( &m_PopCS );
	}
	return PopData;
}

BOOL CMPQueue::PointReturn(_PointData* pRtnData)
{
	if(pRtnData == NULL)
		return FALSE;

	return TRUE;
}

//-------------------------------------------------------------------------------------------------------
//	Name		 :: IsEmpty()
//	Create Date	 :: 2003/12/17
//	Description	 :: 钮俊 单捞鸥啊 乐绰瘤甫 八荤茄促.
//	param		 ::
//	Return Value :: 钮俊 单捞鸥啊 茄俺扼档 乐促搁 FASLE
//					茄俺档 绝促搁..				  TRUE
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
BOOL CMPQueue::IsEmpty()
{
	if(	m_nPackSize == 0)
        return TRUE;
	return FALSE;
}


//-------------------------------------------------------------------------------------------------------
//	Name		 :: Empty()
//	Create Date	 :: 2003/12/17
//	Description	 :: 皋葛府甫 檬扁拳 矫挪促.
//	param		 ::
//	Return Value :: 
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
void CMPQueue::Empty()
{
	__try {
		EnterCriticalSection( &m_PopCS );
		EnterCriticalSection( &m_PushCS );
		
		for(int i = 0; i < QUEUESIZE ; i++)
		{
			m_pBuf[i].iNum = i;
			m_pBuf[i].iSize = 0;
			memset(&m_pBuf[i].pPointData,0,sizeof(m_pBuf[i].pPointData));
		}

		m_nHead = 0;
		m_nTail = 0;
		m_nPackSize = 0;
		m_pHeadPos = m_pBuf;
		m_pTailPos = m_pBuf;
	}

	__finally
	{
		LeaveCriticalSection( &m_PopCS );
		LeaveCriticalSection( &m_PushCS );
	}

}

⌨️ 快捷键说明

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