#include "stdafx.h" #include "EventPool.h" #include "msgdef.h" #include "EventQueue.h" #include "EventThread.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CEventPool::CEventPool() { m_pThread = new CEventThread; m_pThread->SetSemaphoreNum(100000); m_pThread->Start(); m_pEventQueue = new CEventQueue; } CEventPool::~CEventPool() { SafeRelease(m_pThread); ClearAllEvent(); } /************************************************************************/ /* 函数:AddEvent 描述:添加任务事件 参数: IN LPSEVENT lpEvent 任务事件 返回:1成功 */ /************************************************************************/ int CEventPool::AddEvent(IN LPSEVENT lpEvent) { m_pEventQueue->Push_Back(lpEvent); m_lock.lock(); ++m_dwEventSize; m_lock.unlock(); return 1; } /************************************************************************/ /* 函数:ClearAllEvent 描述:清除所有事件 参数: 返回: */ /************************************************************************/ void CEventPool::ClearAllEvent() { if(m_pEventQueue) m_pEventQueue->Clear(); SafeRelease(m_pEventQueue); } // /************************************************************************/ /* 函数:TakeOutEvent 描述:从任务队列取出任务 参数: 返回:成功返回任务,失败为NULL */ /************************************************************************/ LPSEVENT CEventPool::TakeOutEvent() { m_lock.lock(); DWORD dwSize = m_dwEventSize; m_lock.unlock(); if(dwSize == 0) return NULL; LPSEVENT lp = m_pEventQueue->Pop_Front(); if(lp == NULL) return NULL; m_lock.lock(); --m_dwEventSize; m_lock.unlock(); return lp; } /************************************************************************/ /* 函数:GetEventNum 描述:获取事件数量 参数: 返回:任务数量 */ /************************************************************************/ int CEventPool::GetEventNum() { m_lock.lock(); DWORD dwSize = m_dwEventSize; m_lock.unlock(); return dwSize; } /************************************************************************/ /* 函数:DeleteEvent 描述:删除事件 参数: 返回:任务数量 */ /************************************************************************/ void CEventPool::DeleteEvent() { m_pEventQueue->Pop_Front(); } /************************************************************************/ /* 函数:Terminate 描述:终止线程 参数: 返回: */ /************************************************************************/ void CEventPool::Terminate() { m_pThread->Exit(); }