123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #pragma once
- #include <pthread.h>
- #include <semaphore.h>
- #include <unistd.h>
- #include <string>
- #include <queue>
- #include <sys/types.h>
- #define CcosTHREAD_API
- #include "CcosLock.h"
- #include "ResDataObject.h"
- #include "LinuxEvent.h"
- #define MAX_CHECK_TIME_PERIOD (10000)
- typedef void* PVOID;
- class CcosTHREAD_API Thread_Base {
- protected:
- pthread_t m_Base_Thread;
- unsigned long m_ThreadID;
- std::shared_ptr<LinuxEvent> m_ExitFlag;
- std::shared_ptr<LinuxEvent> m_WorkFlag;
- std::shared_ptr<LinuxEvent> m_RunFlag;
- bool m_ThreadRunning;
- bool m_ExitRequested;
- pthread_cond_t m_StateCond;
- std::string m_strName;
- PVOID m_pThreadLogger;
- virtual bool Exec();
- virtual bool OnStartThread();
- virtual bool OnEndThread();
- std::shared_ptr<LinuxEvent> GetWorkEvt();
- std::shared_ptr<LinuxEvent> GetExitEvt();
- static void* Thread_Base_Thread(void* pPara);
- public:
- Thread_Base();
- virtual ~Thread_Base();
- void SetLogger(PVOID pLoger);
- PVOID GetLogger();
- bool StartThread(bool Sync = true, bool Inherit = true);
- bool StopThread(unsigned long timeperiod = 10000);
- void NotifyExit();
- int WaitTheIncommingEvent(unsigned long waittime);
- bool WaitTheThreadEnd(unsigned long waittime);
- bool WaitTheThreadEndSign(unsigned long waittime);
- bool RegistThread();
- bool UnRegistThread();
- bool WaitTheThreadOnTheRun(unsigned long waittime);
- bool SetThreadOnTheRun(bool OnTheRun);
- void NotifyThreadWork();
- pthread_t GetTID();
- void SetName(const char* pszThreadName);
- void ThreadExitProcedure();
- };
- class CcosTHREAD_API Work_Thread : public Thread_Base, public CcosLock {
- protected:
- std::shared_ptr<LinuxEvent> m_PauseEvt;
- std::shared_ptr<LinuxEvent> m_SleepingEvt;
- std::shared_ptr<LinuxEvent> m_ResumeEvt;
- std::shared_ptr<LinuxEvent> m_WorkingEvt;//Ë«·½È·ÈϽáÊø½»»¥
- void* m_pWorkQueReq;//request
- void* m_pWorkQueRes;//response
- bool PopReqDataObject(ResDataObject& obj);
- bool PopResDataObject(ResDataObject& obj);
- bool WaitForInQue(unsigned long m_Timeout = (unsigned long)-1);
- bool CheckForPause();
- bool WaitforResume();
- public:
- Work_Thread();
- virtual ~Work_Thread();
- bool PushReqDataObject(ResDataObject& obj);
- bool PushResDataObject(ResDataObject& obj);
- bool PauseThread(unsigned long timeout = (unsigned long)-1);
- bool ResumeThread(unsigned long timeout = (unsigned long)-1);
- };
- class CcosTHREAD_API Ccos_Thread : public Thread_Base {
- public:
- Ccos_Thread();
- virtual ~Ccos_Thread();
- };
- #define WAITROUTINE(x) { \
- int ret = WaitTheIncommingEvent(x); \
- if(ret == 0) return false; \
- if(ret == -1) return true; \
- }
- #define WAIT(p, time) if(p->WaitTheThreadEndSign(time))
- #define WAITRETURN(p, time, ret) if(p->WaitTheThreadEndSign(time)) return ret
- #define WAITRETURNVOID(p, time) if(p->WaitTheThreadEndSign(time)) return
|