123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // thread.h :
- //
- #if !defined(AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_)
- #define AGD_THREAD_H__8BEF8FA0_B86A_48C3_AA47_4BDCB70DE22D__INCLUDED_
- #include <pthread.h> // Compile and link with -pthread
- #include <vector>
- /////////////////////////////////////////////////////////////////////////////
- // 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<int> 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_)
|