// thread.h : // #if !defined(AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_) #define AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_ #include // Compile and link with -pthread #include ///////////////////////////////////////////////////////////////////////////// // thread.h - Declarations: class CThread { public: typedef void* (*PFN_THREAD_ROUTINE) (void*); typedef void (*PFN_CLEANUP_ROUTINE) (void*); private: typedef struct _INTTP { CThread *pThis; void *pParam; }INTTP, *LPINTTP; typedef const INTTP *LPCINTTP; public: CThread(void); virtual ~CThread(void); int Create(PFN_THREAD_ROUTINE pFunc, void *pParam = NULL); int Create(void *pParam = NULL); int Cancel(void); int Join(void **ppRetval); int Detach(void); int Signal(int nSig); pthread_t GetID(void) const { return m_tID; } protected: int WaitSignal(int *pSignal); int WaitSignalTimeout(unsigned long long nUs, int *pSignal); bool PopSignal(int *pSignal); virtual void* ThreadRoutine(void *pParam); private: static void* _ThreadStart(void *pParam); private: pthread_t m_tID; pthread_attr_t m_tAttr; pthread_cond_t m_tCond; pthread_mutex_t m_tMtxCond; std::vector m_vSigs; int m_nCondSig; bool m_bSignaled; bool m_bBlocked; INTTP m_itp; }; ///////////////////////////////////////////////////////////////////////////// #endif // !defined(AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_)