summaryrefslogtreecommitdiff
path: root/Runtime/Threading/Thread.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-25 23:29:21 +0800
committerchai <chaifix@163.com>2021-10-25 23:29:21 +0800
commit7ecf913256fb396e3027aac3318d996a716a52ef (patch)
tree4540835c881a63b665e2a692bf30115fd29e8bb0 /Runtime/Threading/Thread.h
parent0816cd70ca1a213b6ed872bcf3c0bf0912473722 (diff)
+ job system
Diffstat (limited to 'Runtime/Threading/Thread.h')
-rw-r--r--Runtime/Threading/Thread.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/Runtime/Threading/Thread.h b/Runtime/Threading/Thread.h
new file mode 100644
index 0000000..ea86e16
--- /dev/null
+++ b/Runtime/Threading/Thread.h
@@ -0,0 +1,70 @@
+#pragma once
+#include <windows.h>
+#include <vector>
+#include <exception>
+
+#include "Job.h"
+#include "Runtime/Utilities/Type.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