summaryrefslogtreecommitdiff
path: root/Client/Source/Threading/Thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Source/Threading/Thread.h')
-rw-r--r--Client/Source/Threading/Thread.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/Client/Source/Threading/Thread.h b/Client/Source/Threading/Thread.h
new file mode 100644
index 0000000..77d8dff
--- /dev/null
+++ b/Client/Source/Threading/Thread.h
@@ -0,0 +1,71 @@
+#pragma once
+#include <windows.h>
+#include <vector>
+#include <exception>
+
+#include "../Utilities/Type.h"
+
+#include "Job.h"
+#include "Mutex.h"
+
+class ThreadException : public std::exception
+{
+public:
+ ThreadException(const char* what)
+ : std::exception(what)
+ {
+ }
+};
+
+class Thread
+{
+public:
+ Thread(uint32 stacksize = 0)/*throw ThreadExeception*/;
+ virtual ~Thread();
+
+ virtual void Run() = 0;
+
+ virtual void Resume();
+ virtual void Join() ;
+ virtual void Kill() ;
+
+ virtual void Sleep(uint ms) ;
+
+ virtual bool IsRunning() ;
+ virtual bool IsCurrent() ;
+
+protected:
+ HANDLE m_Handle;
+
+};
+
+// 任务系统的线程
+class WorkThread : public Thread
+{
+public:
+ void Run() override;
+ void Dispatch(void* param); // call in main thread
+
+ void AddJobAtEnd(Job* job);
+
+private:
+ Mutex m_PendingMutex;
+ Mutex m_FinishedMutex;
+
+ std::vector<Job*> m_PendingJobs;
+ std::vector<Job*> m_FinishedJobs;
+
+};
+
+// 执行小段代码的线程
+class CodePieceThread : public Thread
+{
+public:
+ typedef void(*CodePiece)();
+
+ void Run() override;
+
+private:
+ std::vector<CodePiece> m_CodePieces;
+
+}; \ No newline at end of file