From c270d033fa04873ee7a8925dbb00cae5edc4555c Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 30 Mar 2019 11:59:35 +0800 Subject: *misc --- source/modules/asura-utils/threading/thread.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'source/modules/asura-utils/threading/thread.h') diff --git a/source/modules/asura-utils/threading/thread.h b/source/modules/asura-utils/threading/thread.h index 340fca3..d365fd0 100644 --- a/source/modules/asura-utils/threading/thread.h +++ b/source/modules/asura-utils/threading/thread.h @@ -9,6 +9,7 @@ #include "task.h" #include "mutex.h" #include "semaphore.h" +#include "threadable.h" namespace AsuraEngine { @@ -19,7 +20,7 @@ namespace AsuraEngine /// /// 线程的几种不同的实现: - /// 1: Deferred(延迟模式),线程上的任务完成后,需要手动在主线程调用Post方法, + /// 1: Deferred(延迟模式),线程上的任务完成后,需要手动在主线程调用Dispatch方法, /// 在主线程调回调函数,将发布从异步改为同步操作,解决主lua_State冲突的问题。 /// 2: Immediate(立即模式),每一个线程维护一个lua_newthread创建出来的lua_State。 /// 回调函数在不同的lua_State中调用,避免不同的线程访问同一个lua_State。 @@ -27,7 +28,7 @@ namespace AsuraEngine enum ThreadType { THREAD_TYPE_DEFERRED, - THREAD_TYPE_IMMEDIATE, + THREAD_TYPE_IMMEDIATE, // unsafe }; enum ThreadState @@ -43,6 +44,7 @@ namespace AsuraEngine /// class Thread ASURA_FINAL : public AEScripting::Portable + , public Threadable { public: @@ -102,14 +104,14 @@ namespace AsuraEngine /// /// 执行任务队列。 /// - void Process(); + int Process() override; const std::string& GetName(); /// /// 回调。 /// - void Post(); + void Dispatch(); /// /// 休眠函数 @@ -141,7 +143,7 @@ namespace AsuraEngine LUAX_DECL_METHOD(_IsStopped); LUAX_DECL_METHOD(_IsCurrent); LUAX_DECL_METHOD(_Sleep); - LUAX_DECL_METHOD(_Post); + LUAX_DECL_METHOD(_Dispatch); LUAX_DECL_METHOD(_GetName); LUAX_DECL_METHOD(_GetType); LUAX_DECL_METHOD(_GetState); @@ -149,14 +151,15 @@ namespace AsuraEngine //----------------------------------------------------------------------------// + ThreadImpl* mImpl; + + lua_State* mLuaThread; + /// /// 此次运行是否是守护模式。 /// bool mIsDaemon; - lua_State* mLuaThread; - - ThreadImpl* mImpl; std::string mName; ThreadType mType; uint mSleepTime; @@ -204,7 +207,7 @@ namespace AsuraEngine ThreadImpl() {}; virtual ~ThreadImpl() {}; - virtual bool Start(Thread* thread, uint32 stacksize = 0) = 0; + virtual bool Start(Threadable* thread, uint32 stacksize = 0) = 0; virtual void Join() = 0; virtual void Kill() = 0; -- cgit v1.1-26-g67d0