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