X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fthreads.h;h=4161de3261b12d68d7c4c137dc923ab1281db404;hb=994dbaaa5c1f32810f3b4266caf5d6dd72e21718;hp=4ae5ac72557433464e96236e9821aee8ba414561;hpb=3424a2f327e569e92c7282c6e643536984a65c64;p=deb_libcec.git diff --git a/src/lib/platform/threads.h b/src/lib/platform/threads.h index 4ae5ac7..4161de3 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; @@ -67,7 +69,7 @@ namespace CEC class CLockObject { public: - CLockObject(CMutex *mutex); + CLockObject(CMutex *mutex, bool bTryLock = false); ~CLockObject(void); bool IsLocked(void) const { return m_bLocked; } @@ -86,15 +88,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; }; };