📄 datacenter.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 + -