diff options
Diffstat (limited to 'lib/thread.h')
-rw-r--r-- | lib/thread.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/thread.h b/lib/thread.h new file mode 100644 index 0000000..1598ff2 --- /dev/null +++ b/lib/thread.h @@ -0,0 +1,92 @@ +/* + * thread.h + * + * See the README file for copyright information and how to reach the author. + * + */ + +#ifndef __LIB_THREAD_H +#define __LIB_THREAD_H + +#include "common.h" + +//*************************************************************************** +// Class cThread +//*************************************************************************** + +class cThread +{ + public: + + cThread(const char *Description = NULL, bool LowPriority = false); + virtual ~cThread(); + + void SetDescription(const char* Description, ...) __attribute__ ((format (printf, 2, 3))); + bool Start(int s = no); + bool Active(); + void SetPriority(int priority); + void SetIOPriority(int priority); + + static pid_t ThreadId(); + + private: + + static void* StartThread(cThread *Thread); + + bool active; + bool running; + pthread_t childTid; + pid_t childThreadId; + cMyMutex mutex; + char* description; + bool lowPriority; + int silent; + + protected: + + virtual void action() = 0; + + void Lock() { mutex.Lock(); } + void Unlock() { mutex.Unlock(); } + bool Running() { return running; } + void Cancel(int WaitSeconds = 0); +}; + +class cCondWait +{ + public: + + cCondWait(); + ~cCondWait(); + + bool Wait(int TimeoutMs = 0); + void Signal(); + + static void SleepMs(int TimeoutMs); + + private: + + pthread_mutex_t mutex; + pthread_cond_t cond; + bool signaled; +}; + +class cCondVar +{ + public: + + cCondVar(); + ~cCondVar(); + + void Wait(cMyMutex &Mutex); + bool TimedWait(cMyMutex &Mutex, int TimeoutMs); + void Broadcast(); + + private: + + pthread_cond_t cond; +}; + +//*************************************************************************** + +#endif // __LIB_THREAD_H |