summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-utils/threading/thread.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-27 22:18:14 +0800
committerchai <chaifix@163.com>2019-03-27 22:18:14 +0800
commit69f7d1bd745ed5680b9bc4e3cfdd882ff2a5ad26 (patch)
tree729e563da8fea6cf8c5455f3afdb3c6ce0aecde4 /source/libs/asura-lib-utils/threading/thread.h
parent66c5fdc564dd892ed265132d6c1378dbe3cebcee (diff)
+threading
Diffstat (limited to 'source/libs/asura-lib-utils/threading/thread.h')
-rw-r--r--source/libs/asura-lib-utils/threading/thread.h58
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;
};