ThreadStorage.h
上传用户:maryhy001
上传日期:2007-05-02
资源大小:2317k
文件大小:2k
源码类别:

网格计算

开发平台:

Visual C++

  1. // ThreadStorage.h: interface for the CThreadStorage class.
  2. //
  3. // Written by Marat Bedretdinov (maratb@hotmail.com)
  4. // Copyright (c) 2000.
  5. //
  6. // This code may be used in compiled form in any way you desire. This
  7. // file may be redistributed unmodified by any means PROVIDING it is 
  8. // not sold for profit without the authors written consent, and 
  9. // providing that this notice and the authors name is included. 
  10. //
  11. // This file is provided "as is" with no expressed or implied warranty.
  12. // The author accepts no liability if it causes any damage whatsoever.
  13. // It's free - so you get what you pay for.//
  14. #if !defined(AFX_THREADSTORAGE_H__CB0FDBE4_3223_48F8_A59B_716CCC364FEC__INCLUDED_)
  15. #define AFX_THREADSTORAGE_H__CB0FDBE4_3223_48F8_A59B_716CCC364FEC__INCLUDED_
  16. #if _MSC_VER > 1000
  17. #pragma once
  18. #endif // _MSC_VER > 1000
  19. #include "Thread.h"
  20. #include "SafeVector.h"
  21. class CThreadStorage  
  22. {
  23. public:
  24. CThreadStorage();
  25. virtual ~CThreadStorage();
  26. void Add(CThread*);
  27. void Remove(CThread*);
  28. CThread* GetAt(unsigned int);
  29. CThread* GetByThreadId(unsigned long);
  30. ulong Size(void) {return m_vecThreads.size();}
  31. protected:
  32. safe_vector<CThread*> m_vecThreads;
  33. };
  34. template <class T>
  35. class CQueue  
  36. {
  37. public:
  38. CQueue() {}
  39.     virtual ~CQueue();
  40. void    Add(T);
  41. T       Retrieve();
  42. bool    IsThereData() {return (m_vecItems.size() > 0) ? true : false;}
  43. unsigned int Size() {return m_vecItems.size();} 
  44. void    EmptyQueue() { m_vecItems.wipe(); }
  45. protected:
  46. safe_list<T> m_vecItems;
  47. };
  48. /////////////////////////////////////////////////////////////////////////
  49. template <class T> CQueue<T>::~CQueue()
  50. {
  51. EmptyQueue();
  52. }
  53. template <class T> void CQueue<T>::Add(T item)
  54. {
  55. m_vecItems.push_back(item);
  56. }
  57. template <class T> T CQueue<T>::Retrieve()
  58. {
  59. if (!m_vecItems.size())
  60. throw CNetException(ERR_NET_CANNOT_RETRIEVE_FROM_EMPTY_QUEUE, "template <class T> T CQueue<T>::Retrieve()");
  61. return m_vecItems.retrieve_front();
  62. }
  63. #endif // !defined(AFX_THREADSTORAGE_H__CB0FDBE4_3223_48F8_A59B_716CCC364FEC__INCLUDED_)