X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fthreads.h;h=2c3c2c540de03a369a3332a4e7e0e8a30309fc6d;hb=6f14b51266d3af3f215171a4a5fca5be011c023e;hp=a258081ccef8bbdf6a5bc8f33826fbaf26ae6c84;hpb=a9056daaa4fa20d8048be09ff9dba8b392c7d3d8;p=deb_libcec.git diff --git a/src/lib/platform/threads.h b/src/lib/platform/threads.h index a258081..2c3c2c5 100644 --- a/src/lib/platform/threads.h +++ b/src/lib/platform/threads.h @@ -31,48 +31,60 @@ * http://www.pulse-eight.net/ */ -#include "os-dependent.h" #include namespace CEC { - class CMutex; + class IMutex + { + public: + IMutex(bool bRecursive = true) { m_bRecursive = bRecursive ; }; + virtual ~IMutex(void) {}; + + virtual bool TryLock(void) = 0; + virtual bool Lock(void) = 0; + virtual void Unlock(void) = 0; + + protected: + bool m_bRecursive; + }; - class CCondition + class ICondition { public: - CCondition(void); - virtual ~CCondition(void); + virtual void Broadcast(void) = 0; + virtual void Signal(void) = 0; + virtual bool Wait(IMutex *mutex, uint32_t iTimeout = 0) = 0; - void Broadcast(void); - void Signal(void); - bool Wait(CMutex *mutex, uint32_t iTimeout = 0); static void Sleep(uint32_t iTimeout); - - private: - pthread_cond_t m_cond; }; - class CMutex + class IThread { public: - CMutex(bool bRecursive = true); - virtual ~CMutex(void); + IThread(void); + virtual ~IThread(void); - bool TryLock(void); - bool Lock(void); - void Unlock(void); + virtual bool IsRunning(void) const { return m_bRunning; }; + virtual bool CreateThread(bool bWait = true) = 0; + virtual bool IsStopped(void) const { return m_bStop; }; - pthread_mutex_t m_mutex; + virtual bool StopThread(bool bWaitForExit = true); + virtual bool Sleep(uint32_t iTimeout); - private: - static pthread_mutexattr_t *GetMutexAttribute(); + virtual void *Process(void) = 0; + + protected: + bool m_bStop; + bool m_bRunning; + ICondition *m_threadCondition; + IMutex *m_threadMutex; }; class CLockObject { public: - CLockObject(CMutex *mutex, bool bTryLock = false); + CLockObject(IMutex *mutex, bool bTryLock = false); ~CLockObject(void); bool IsLocked(void) const { return m_bLocked; } @@ -80,32 +92,7 @@ namespace CEC void Lock(void); private: - CMutex *m_mutex; + IMutex *m_mutex; bool m_bLocked; }; - - class CThread - { - public: - CThread(void); - virtual ~CThread(void); - - virtual bool IsRunning(void) const { return m_bRunning; } - virtual bool CreateThread(bool bWait = true); - virtual bool StopThread(bool bWaitForExit = true); - virtual bool IsStopped(void) const { return m_bStop; }; - virtual bool Sleep(uint32_t iTimeout); - - static void *ThreadHandler(CThread *thread); - virtual void *Process(void) = 0; - - protected: - CCondition m_threadCondition; - - private: - pthread_t m_thread; - CMutex m_threadMutex; - bool m_bStop; - bool m_bRunning; - }; };