summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-utils/threading/thread.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-29 00:43:25 +0800
committerchai <chaifix@163.com>2019-03-29 00:43:25 +0800
commitf4c338c63f3456a8eccd56c35e233843687d55be (patch)
tree7278fe4723320c9ef310c5a04d92bf0be1bc778c /source/libs/asura-lib-utils/threading/thread.h
parent3bced067a4144381e59ce4bd0eb749eeff5ad1f4 (diff)
*thread
Diffstat (limited to 'source/libs/asura-lib-utils/threading/thread.h')
-rw-r--r--source/libs/asura-lib-utils/threading/thread.h52
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;
};