/* * === FUNCTION ====================================================================== * Name: GetMessage * Description: 以阻塞的方式从消息队列中取出一条消息 * ===================================================================================== */ CMessage * CUsrDefMsgQueue::GetMessage() { CStatus s = m_Event.Wait(); if( !s.IsSuccess() ) { throw s; } return Pop(); }
CThreadForMsgLoop:: ~CThreadForMsgLoop() { if(m_bWaitForDeath && m_pThread != 0) { CStatus s = m_pThread->WaitForDeath(); if(!s.IsSuccess()) { throw s; } } }
/* * === FUNCTION ====================================================================== * Name: Push * Description: 以互斥的方式向消息队列中插入一条消息 * ===================================================================================== */ CStatus CUsrDefMsgQueue::Push(CMessage * pMsg) { CEnterCriticalSection ecs(&m_Mutex); if( IsFull() ) { CStatus s = EnlargeQueue(); if(!s.IsSuccess()) return CStatus(-1,0,"failed to Enlarge the queue!"); } m_pQueueSpace[m_iQueueTail] = pMsg; m_iQueueTail = (m_iQueueTail + 1) % m_iTotalRoom; return CStatus(0,0); }