64,637
社区成员
发帖
与我相关
我的任务
分享
void CMainLog::MsgProcess()
{
EnterCriticalSection(&m_cs);//加锁
while (G_MsgList.bGetMsgQuene(&cFrom, pData, &dwMsgSize, &iClientH, &cKey) == TRUE)
{
里面有IOCp放入队列的数据就提取出来处理
}
LeaveCriticalSection(&m_cs);//解锁
BOOL CMsgList::bPutMsgQuene(char cFrom, char * pData, DWORD dwMsgSize, int iIndex, char cKey)
{
EnterCriticalSection(&m_cs);//加锁
if (m_pMsgQueue[m_iQueueTail] != NULL)
{
LeaveCriticalSection(&m_cs);//解锁
return FALSE;
}
m_pMsgQueue[m_iQueueTail] = new class CMsg;
if (m_pMsgQueue[m_iQueueTail] == NULL)
{
LeaveCriticalSection(&m_cs);//解锁
return FALSE;
}
if (m_pMsgQueue[m_iQueueTail]->bPut(cFrom, pData, dwMsgSize, iIndex, cKey) == FALSE)
{
LeaveCriticalSection(&m_cs);//解锁
return FALSE;
}
m_iQueueTail++;
if (m_iQueueTail >= DEF_MSGQUEUESIZE) m_iQueueTail = 0;
LeaveCriticalSection(&m_cs);//解锁
return TRUE;
}
BOOL CMsg::bPut(char cFrom, char * pData, DWORD dwSize, int iIndex, char cKey)
{
EnterCriticalSection(&m_cs);//加锁
m_pData = new char [dwSize + 1];
if (m_pData == NULL) return FALSE;
ZeroMemory(m_pData, dwSize + 1);
memcpy(m_pData, pData, dwSize);
m_dwSize = dwSize;
m_cFrom = cFrom;
m_iIndex = iIndex;
m_cKey = cKey;
LeaveCriticalSection(&m_cs);//解锁
return TRUE;
}
void CMsg::Get(char * pFrom, char * pData, DWORD * pSize, int * pIndex, char * pKey)
{
EnterCriticalSection(&m_cs);//加锁
*pFrom = m_cFrom;
memcpy(pData, m_pData, m_dwSize);
*pSize = m_dwSize;
*pIndex = m_iIndex;
*pKey = m_cKey;
LeaveCriticalSection(&m_cs);//解锁
}