ThreadQueue.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "stdafx.h"
  2. #include "ThreadQueue.h"
  3. #include "Thread.h"
  4. #ifdef _DEBUG
  5. #define new DEBUG_NEW
  6. #undef THIS_FILE
  7. static char THIS_FILE[] = __FILE__;
  8. #endif
  9. CThreadQueue::CThreadQueue(){}
  10. CThreadQueue::~CThreadQueue(){}
  11. /************************************************************************/
  12. /*
  13. 函数:Release
  14. 描述:清除所有元素
  15. 参数:
  16. 返回:
  17. */
  18. /************************************************************************/
  19. void CThreadQueue::Release()
  20. {
  21. CAutoLock autolock(&m_l);
  22. std::list<CThreadBase*>::iterator iter = m_list.begin();
  23. for(;iter != m_list.end();)
  24. {
  25. CThreadBase* p = (*iter);
  26. if(p != NULL)
  27. {
  28. p->Exit();
  29. delete p;
  30. p = NULL;
  31. }
  32. ++iter;
  33. }
  34. m_list.clear();
  35. }
  36. /************************************************************************/
  37. /*
  38. 函数:Delete
  39. 描述:删除
  40. 参数:
  41. IN CONST CThreadBase* p
  42. 返回:1成功,0失败
  43. */
  44. /************************************************************************/
  45. int CThreadQueue::Delete(IN CThreadBase*& p)
  46. {
  47. CAutoLock autolock(&m_l);
  48. std::list<CThreadBase*>::iterator iter = m_list.begin();
  49. for(;iter != m_list.end();)
  50. {
  51. if((*iter)->GetThreadID() == p->GetThreadID())
  52. {
  53. p->Stop();
  54. // delete (*iter);
  55. m_list.erase(iter);
  56. return 1;
  57. }
  58. ++iter;
  59. }
  60. return 0;
  61. }
  62. /************************************************************************/
  63. /*
  64. 函数: Remove
  65. 描述: 删除某一元素
  66. 参数:
  67. 返回:
  68. */
  69. /************************************************************************/
  70. void CThreadQueue::Remove(IN CThreadBase*& pThread)
  71. {
  72. CAutoLock autots(&m_l);
  73. std::list<CThreadBase*>::iterator iter = m_list.begin();
  74. for(;iter != m_list.end();)
  75. {
  76. if((*iter)->GetThreadID() == pThread->GetThreadID())
  77. {
  78. m_list.erase(iter);
  79. return;
  80. }
  81. ++iter;
  82. }
  83. }