diff options
author | chai <chaifix@163.com> | 2019-03-27 22:18:14 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-03-27 22:18:14 +0800 |
commit | 69f7d1bd745ed5680b9bc4e3cfdd882ff2a5ad26 (patch) | |
tree | 729e563da8fea6cf8c5455f3afdb3c6ce0aecde4 /source/libs/asura-lib-utils/threading/thread.h | |
parent | 66c5fdc564dd892ed265132d6c1378dbe3cebcee (diff) |
+threading
Diffstat (limited to 'source/libs/asura-lib-utils/threading/thread.h')
-rw-r--r-- | source/libs/asura-lib-utils/threading/thread.h | 58 |
1 files changed, 52 insertions, 6 deletions
diff --git a/source/libs/asura-lib-utils/threading/thread.h b/source/libs/asura-lib-utils/threading/thread.h index 0058144..24b549c 100644 --- a/source/libs/asura-lib-utils/threading/thread.h +++ b/source/libs/asura-lib-utils/threading/thread.h @@ -1,10 +1,13 @@ #ifndef __ASURA_THREAD_H__ #define __ASURA_THREAD_H__ +#include <string> #include <queue> + #include <asura-lib-utils/scripting/portable.hpp> #include "thread_task.h" +#include "mutex.h" namespace AsuraEngine { @@ -23,21 +26,55 @@ namespace AsuraEngine LUAX_DECL_FACTORY(Thread); - bool Enqueue(ThreadTask* task); + Thread(const std::string& name = ""); + ~Thread(); + + bool AddTask(ThreadTask* task); + + void Start(uint32 stacksize = 0); + + /// + /// ǿֹ̡߳עҪnewdeleteִ֮TerminateThreadڼʹnewˡ + /// https://blog.csdn.net/anye3000/article/details/7470674 + /// + void Kill(); + + /// + /// ̵߳ȴ߳̽żִС + /// + void Join(); + + bool IsRunning(); - void Run(); + bool IsCurrent(); + + /// + /// ִС + /// + void Execute(); + + const std::string& GetName(); private: + LUAX_DECL_METHOD(_New); + LUAX_DECL_METHOD(_Start); + LUAX_DECL_METHOD(_Join); + LUAX_DECL_METHOD(_Kill); + LUAX_DECL_METHOD(_AddTask); + LUAX_DECL_METHOD(_IsRunning); + LUAX_DECL_METHOD(_IsCurrent); + LUAX_DECL_METHOD(_GetName); + /// - /// С + /// С /// std::queue<ThreadTask*> mTaskQueue; - ThreadImpl* mImpl; + Mutex mMutex; - LUAX_DECL_METHOD(_Enqueue); - LUAX_DECL_METHOD(_Run); + ThreadImpl* mImpl; + std::string mName; }; @@ -51,6 +88,15 @@ namespace AsuraEngine ASURA_ABSTRACT class ThreadImpl { public: + ThreadImpl() {}; + virtual ~ThreadImpl() {}; + + virtual bool Start(Thread* thread, uint32 stacksize = 0) = 0; + virtual void Join() = 0; + virtual void Kill() = 0; + + virtual bool IsRunning() = 0; + virtual bool IsCurrent() = 0; }; |