thread.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // thread.h :
  2. //
  3. #if !defined(AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_)
  4. #define AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_
  5. #include <pthread.h> // Compile and link with -pthread
  6. #include <vector>
  7. /////////////////////////////////////////////////////////////////////////////
  8. // thread.h - Declarations:
  9. class CThread
  10. {
  11. public:
  12. typedef void* (*PFN_THREAD_ROUTINE) (void*);
  13. typedef void (*PFN_CLEANUP_ROUTINE) (void*);
  14. private:
  15. typedef struct _INTTP
  16. {
  17. CThread *pThis;
  18. void *pParam;
  19. }INTTP, *LPINTTP;
  20. typedef const INTTP *LPCINTTP;
  21. public:
  22. CThread(void);
  23. virtual ~CThread(void);
  24. int Create(PFN_THREAD_ROUTINE pFunc, void *pParam = NULL);
  25. int Create(void *pParam = NULL);
  26. int Cancel(void);
  27. int Join(void **ppRetval);
  28. int Detach(void);
  29. int Signal(int nSig);
  30. pthread_t GetID(void) const {
  31. return m_tID;
  32. }
  33. protected:
  34. int WaitSignal(int *pSignal);
  35. int WaitSignalTimeout(unsigned long long nUs, int *pSignal);
  36. bool PopSignal(int *pSignal);
  37. virtual void* ThreadRoutine(void *pParam);
  38. private:
  39. static void* _ThreadStart(void *pParam);
  40. private:
  41. pthread_t m_tID;
  42. pthread_attr_t m_tAttr;
  43. pthread_cond_t m_tCond;
  44. pthread_mutex_t m_tMtxCond;
  45. std::vector<int> m_vSigs;
  46. int m_nCondSig;
  47. bool m_bSignaled;
  48. bool m_bBlocked;
  49. INTTP m_itp;
  50. };
  51. /////////////////////////////////////////////////////////////////////////////
  52. #endif // !defined(AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_)