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

📄 datacenter.cpp

📁 COM 组建的开发
💻 CPP
字号:
// DataCenter.cpp: implementation of the CDataCenter class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"
#include "DataCenter.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

CDataCenter::CDataCenter()
{
	m_handleGet = CreateMutex(NULL,FALSE,NULL);
	m_handleSet = CreateMutex(NULL,FALSE,NULL);
}

CDataCenter::~CDataCenter()
{

}
// 对Set链表进行加锁 [5/12/2008 By willing]
int CDataCenter::LockSet()
{
	DWORD dwRe = WaitForSingleObject(this->m_handleSet,OUT_TIME);
	if (dwRe == WAIT_TIMEOUT)
	{
		ReleaseMutex(m_handleSet);
		return -1;
	}
	return 0;
}
// 对Get链表进行加锁 [5/12/2008 By willing]
int CDataCenter::LockGet()
{
	DWORD dwRe = WaitForSingleObject(this->m_handleGet,OUT_TIME);
	if (dwRe == WAIT_TIMEOUT)
	{
		ReleaseMutex(m_handleGet);
		return -1;
	}
	return 0;
}
// 对Set链表进行解锁 [5/12/2008 By willing]
void CDataCenter::UnlockSet()
{
	ReleaseMutex(m_handleSet);
	return;
}
// 对Get链表进行解锁 [5/12/2008 By willing]
void CDataCenter::UnlockGet()
{
	ReleaseMutex(m_handleGet);
	return;
}
// 清空Set队列 [5/12/2008 By willing]
void CDataCenter::ClearSetList()
{
	if (LockSet() == 0)
	{
		m_lstSetPacket.RemoveAll();
		UnlockSet();
	}
	return;
}
// 清空Get队列 [5/12/2008 By willing]
void CDataCenter::ClearGetList()
{
	if (LockGet() == 0)
	{
		m_lstGetPacket.RemoveAll();
		UnlockGet();
	}
	return;
}
// 向队列中添加一个带处理数据 [5/12/2008 By willing]
void CDataCenter::AddSetPacket(ST_IOITEM ioItem)
{
	if (LockSet() == 0)
	{
		m_lstSetPacket.AddTail(ioItem);
		UnlockSet();
	}else{
		CString strMsg = "";
		strMsg.Format("向Set链表中添加数据失败,数据类型为%d",ioItem.stType.wDataType);
		DEGBUGLOG("CDataCenter","AddSetPacket",strMsg);
	}
	return;
}
// 向队列中添加一个带处理数据 [5/12/2008 By willing]
void CDataCenter::AddGetPacket(ST_IOITEM ioItem)
{
	if (LockSet() == 0)
	{
		m_lstGetPacket.AddTail(ioItem);
		UnlockSet();
	}
	return;
}
// 从Get列表的头部获取一个元素 [5/12/2008 By willing]
int	CDataCenter::GetGetLstHead(long *pDataType, long *pData, long *pSize)
{
	if (LockGet() == 0)
	{
		if (m_lstGetPacket.IsEmpty())
		{
			UnlockGet();
			return -1;
		}
		POSITION pos = m_lstGetPacket.GetHeadPosition();
		if (pos == NULL)
		{
			DEGBUGLOG("CDataCenter","GetGetLstHead","获取Get链表的Head Position失败");
			UnlockGet();
			return -2;
		}
		ST_IOITEM IOItem;
		IOItem =m_lstGetPacket.GetAt(pos);
		*((ST_IODATATYPE *)pDataType) = IOItem.stType;
		*pData = (long)IOItem.pData;
		*pSize = IOItem.dwSize;
		m_lstGetPacket.RemoveHead();
		UnlockGet();
	}
	return 0;
}
// 从Set列表的头部获取一个元素 [5/12/2008 By willing]
int CDataCenter::GetSetLstHead(ST_IOITEM &IOItem)
{
	if (LockSet() == 0)
	{
		if (m_lstSetPacket.IsEmpty())
		{
			UnlockSet();
			return -1;
		}
		POSITION pos = m_lstSetPacket.GetHeadPosition();
		if (pos == NULL)
		{
			DEGBUGLOG("CDataCenter","GetGetLstHead","获取Set链表的Head Position失败");
			UnlockSet();
			return -2;
		}
		IOItem = m_lstSetPacket.GetHead();
		m_lstSetPacket.RemoveHead();
		UnlockSet();
	}
	return 0;	
}

⌨️ 快捷键说明

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