summaryrefslogtreecommitdiff
path: root/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'thread.h')
-rw-r--r--thread.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/thread.h b/thread.h
new file mode 100644
index 0000000..86b9e92
--- /dev/null
+++ b/thread.h
@@ -0,0 +1,57 @@
+/*
+ * thread.h: A simple thread base class
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: thread.h 1.1 2000/10/08 08:36:21 kls Exp $
+ */
+
+#ifndef __THREAD_H
+#define __THREAD_H
+
+#include <pthread.h>
+#include <sys/types.h>
+
+class cThread {
+ friend class cThreadLock;
+private:
+ pthread_t thread;
+ pthread_mutex_t mutex;
+ pid_t parentPid, lockingPid;
+ int locked;
+ bool running;
+ static bool signalHandlerInstalled;
+ static void SignalHandler(int signum);
+ static void *StartThread(cThread *Thread);
+ bool Lock(void);
+ void Unlock(void);
+protected:
+ void WakeUp(void);
+ virtual void Action(void) = 0;
+ void Stop(void);
+public:
+ cThread(void);
+ virtual ~cThread();
+ bool Start(void);
+ };
+
+// cThreadLock can be used to easily set a lock in a thread and make absolutely
+// sure that it will be unlocked when the block will be left. Several locks can
+// be stacked, so a function that makes many calls to another function which uses
+// cThreadLock may itself use a cThreadLock to make one longer lock instead of many
+// short ones.
+
+class cThreadLock {
+private:
+ cThread *thread;
+ bool locked;
+public:
+ cThreadLock(cThread *Thread);
+ ~cThreadLock();
+ bool Locked(void);
+ };
+
+#define LOCK_THREAD cThreadLock ThreadLock(this)
+
+#endif //__THREAD_H