* http://www.pulse-eight.net/
*/
-#include "os-dependent.h"
#include <stdint.h>
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; }
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;
- };
};