X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fthreads.h;h=a258081ccef8bbdf6a5bc8f33826fbaf26ae6c84;hb=7879fa15cd1d00d3334a258ae0fce065c92f6e39;hp=4ae5ac72557433464e96236e9821aee8ba414561;hpb=3424a2f327e569e92c7282c6e643536984a65c64;p=deb_libcec.git diff --git a/src/lib/platform/threads.h b/src/lib/platform/threads.h index 4ae5ac7..a258081 100644 --- a/src/lib/platform/threads.h +++ b/src/lib/platform/threads.h @@ -32,6 +32,7 @@ */ #include "os-dependent.h" +#include namespace CEC { @@ -43,9 +44,10 @@ namespace CEC CCondition(void); virtual ~CCondition(void); + void Broadcast(void); void Signal(void); - bool Wait(CMutex *mutex, int64_t iTimeout); - static void Sleep(int iTimeout); + bool Wait(CMutex *mutex, uint32_t iTimeout = 0); + static void Sleep(uint32_t iTimeout); private: pthread_cond_t m_cond; @@ -54,7 +56,7 @@ namespace CEC class CMutex { public: - CMutex(void); + CMutex(bool bRecursive = true); virtual ~CMutex(void); bool TryLock(void); @@ -62,12 +64,15 @@ namespace CEC void Unlock(void); pthread_mutex_t m_mutex; + + private: + static pthread_mutexattr_t *GetMutexAttribute(); }; class CLockObject { public: - CLockObject(CMutex *mutex); + CLockObject(CMutex *mutex, bool bTryLock = false); ~CLockObject(void); bool IsLocked(void) const { return m_bLocked; } @@ -86,15 +91,21 @@ namespace CEC virtual ~CThread(void); virtual bool IsRunning(void) const { return m_bRunning; } - virtual bool CreateThread(void); - virtual void StopThread(bool bWaitForExit = true); + 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: - pthread_t m_thread; - bool m_bRunning; - bool m_bStop; + CCondition m_threadCondition; + + private: + pthread_t m_thread; + CMutex m_threadMutex; + bool m_bStop; + bool m_bRunning; }; };