#include "stdafx.h" #include "ThreadQueue.h" #include "Thread.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CThreadQueue::CThreadQueue(){} CThreadQueue::~CThreadQueue(){} /************************************************************************/ /* 函数:Release 描述:清除所有元素 参数: 返回: */ /************************************************************************/ void CThreadQueue::Release() { CAutoLock autolock(&m_l); std::list::iterator iter = m_list.begin(); for(;iter != m_list.end();) { CThreadBase* p = (*iter); if(p != NULL) { p->Exit(); delete p; p = NULL; } ++iter; } m_list.clear(); } /************************************************************************/ /* 函数:Delete 描述:删除 参数: IN CONST CThreadBase* p 返回:1成功,0失败 */ /************************************************************************/ int CThreadQueue::Delete(IN CThreadBase*& p) { CAutoLock autolock(&m_l); std::list::iterator iter = m_list.begin(); for(;iter != m_list.end();) { if((*iter)->GetThreadID() == p->GetThreadID()) { p->Stop(); // delete (*iter); m_list.erase(iter); return 1; } ++iter; } return 0; } /************************************************************************/ /* 函数: Remove 描述: 删除某一元素 参数: 返回: */ /************************************************************************/ void CThreadQueue::Remove(IN CThreadBase*& pThread) { CAutoLock autots(&m_l); std::list::iterator iter = m_list.begin(); for(;iter != m_list.end();) { if((*iter)->GetThreadID() == pThread->GetThreadID()) { m_list.erase(iter); return; } ++iter; } }