diff options
Diffstat (limited to 'source/libs/asura-lib-utils/threading/thread.h')
-rw-r--r-- | source/libs/asura-lib-utils/threading/thread.h | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/source/libs/asura-lib-utils/threading/thread.h b/source/libs/asura-lib-utils/threading/thread.h index 1bd5f15..3fa079a 100644 --- a/source/libs/asura-lib-utils/threading/thread.h +++ b/source/libs/asura-lib-utils/threading/thread.h @@ -17,6 +17,28 @@ namespace AsuraEngine class ThreadImpl; /// + /// ̵߳ļֲͬʵ֣ + /// 1: Deferredӳģʽ߳ϵɺҪ̵ֶ߳Post + /// ̵߳ص첽Ϊͬlua_Stateͻ⡣ + /// 2: Immediateģʽÿһ߳άһlua_newthreadlua_State + /// صڲͬlua_Stateеãⲻ̷ͬ߳ͬһlua_State + /// 3: Daemonػģʽ̻߳һֱں̨ + /// + enum ThreadType + { + THREAD_TYPE_DEFERRED, + THREAD_TYPE_IMMEDIATE, + THREAD_TYPE_DAEMON + }; + + enum ThreadState + { + THREAD_STATE_RUNNING, + THREAD_STATE_DEAD, + THREAD_STATE_SUSPEND, + }; + + /// /// ߳壬ÿ߳άһtask queue /// class Thread ASURA_FINAL @@ -26,7 +48,7 @@ namespace AsuraEngine LUAX_DECL_FACTORY(Thread); - Thread(Luax::LuaxState& father, const std::string& name = ""); + Thread(ThreadType type, Luax::LuaxState& luaThread, const std::string& name = ""); ~Thread(); bool AddTask(Task* task); @@ -34,8 +56,10 @@ namespace AsuraEngine void Start(uint32 stacksize = 0); /// - /// ǿֹ̡߳עҪnewdeleteִ֮TerminateThreadڼʹnewˡ + /// ǿֹ̡߳עҪnewdeleteִ֮TerminateThreadڼ + /// ʹnewˡ /// https://blog.csdn.net/anye3000/article/details/7470674 + /// ע⣺ҪʹӿڣӦ߳Լеյ㣬ֶر /// void Kill(); @@ -51,12 +75,21 @@ namespace AsuraEngine /// /// ִС /// - void Execute(); + void Process(); const std::string& GetName(); + /// + /// ص + /// + void Post(); + private: + //----------------------------------------------------------------------------// + + LUAX_DECL_ENUM(ThreadType); + LUAX_DECL_METHOD(_New); LUAX_DECL_METHOD(_Start); LUAX_DECL_METHOD(_Join); @@ -65,6 +98,10 @@ namespace AsuraEngine LUAX_DECL_METHOD(_IsRunning); LUAX_DECL_METHOD(_IsCurrent); LUAX_DECL_METHOD(_GetName); + LUAX_DECL_METHOD(_Sleep); + LUAX_DECL_METHOD(_Post); + + //----------------------------------------------------------------------------// ThreadImpl* mImpl; std::string mName; @@ -75,11 +112,10 @@ namespace AsuraEngine std::queue<Task*> mTaskQueue; Mutex mMutex; - /// - /// ̵߳luaִջΪ˱ִջͻ - /// - lua_State* mState; - Luax::LuaxMemberRef mStateRef; + lua_State* mLuaThread; + + std::queue<Task*> mFinishedTasks; + Mutex mFinishedMutex; }; |