summaryrefslogtreecommitdiff
path: root/src/uThread.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/uThread.h')
-rw-r--r--src/uThread.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/uThread.h b/src/uThread.h
new file mode 100644
index 0000000..a9cc5df
--- /dev/null
+++ b/src/uThread.h
@@ -0,0 +1,66 @@
+/*
+ * uThread.h
+ *
+ * Created on: 2013. 9. 10.
+ * Author: kos
+ */
+
+#ifndef UTHREAD_H_
+#define UTHREAD_H_
+
+#include <string>
+#include <pthread.h>
+//-------------------------------------------------------------------------------
+
+class uThread
+{
+public:
+ enum STATE {
+ STATE_READY = 0,
+ STATE_RUNNING,
+ STATE_TERMINATED,
+ STATE_ZOMBIE,
+ STATE_ABORTED
+ };
+ enum EXIT_TYPE {
+ TYPE_JOINABLE = 0,
+ TYPE_DETACHABLE
+ };
+private:
+ uThread(const uThread&);
+ uThread& operator=(const uThread&);
+
+ uThread::STATE mState;
+ uThread::EXIT_TYPE mExitType;
+protected:
+ pthread_t mTid;
+ std::string mName;
+
+ static void* ThreadMain(void *aParam);
+
+ virtual void Run() = 0;
+ virtual void Terminate() = 0;
+
+ bool Join(pthread_t aTid);
+ void SetState(STATE aState);
+
+ void SetName(std::string aName) { mName = aName; }
+public:
+ uThread(std::string aName="", uThread::EXIT_TYPE aExitType=uThread::TYPE_JOINABLE);
+ virtual ~uThread();
+
+ void Stop();
+ bool Start();
+
+ pthread_t GetTid() { return mTid; }
+ uThread::STATE GetState() const;
+ uThread::EXIT_TYPE GetExitType() const;
+ std::string GetName() const;
+
+ bool IsTerminated() const;
+ bool IsRunning() const;
+ bool Join();
+};
+//-------------------------------------------------------------------------------
+
+#endif /* UTHREAD_H_ */