From c302f5ae5f9e30a28e487e8a764d9cc31546bbea Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 29 Mar 2019 22:51:04 +0800 Subject: *rename --- source/libs/asura-lib-utils/threading/thread.h | 221 ------------------------- 1 file changed, 221 deletions(-) delete mode 100644 source/libs/asura-lib-utils/threading/thread.h (limited to 'source/libs/asura-lib-utils/threading/thread.h') diff --git a/source/libs/asura-lib-utils/threading/thread.h b/source/libs/asura-lib-utils/threading/thread.h deleted file mode 100644 index 0e75770..0000000 --- a/source/libs/asura-lib-utils/threading/thread.h +++ /dev/null @@ -1,221 +0,0 @@ -#ifndef __ASURA_THREAD_H__ -#define __ASURA_THREAD_H__ - -#include -#include - -#include - -#include "task.h" -#include "mutex.h" -#include "semaphore.h" - -namespace AsuraEngine -{ - namespace Threading - { - - class ThreadImpl; - - /// - /// 线程的几种不同的实现: - /// 1: Deferred(延迟模式),线程上的任务完成后,需要手动在主线程调用Post方法, - /// 在主线程调回调函数,将发布从异步改为同步操作,解决主lua_State冲突的问题。 - /// 2: Immediate(立即模式),每一个线程维护一个lua_newthread创建出来的lua_State。 - /// 回调函数在不同的lua_State中调用,避免不同的线程访问同一个lua_State。 - /// - enum ThreadType - { - THREAD_TYPE_DEFERRED, - THREAD_TYPE_IMMEDIATE, - }; - - enum ThreadState - { - THREAD_STATE_IDLE, ///< 闲置,还未创建内核对象 - THREAD_STATE_RUNNING, ///< 正在运行循环 - THREAD_STATE_PAUSED, ///< 在循环中暂停 - THREAD_STATE_STOPPED, ///< 退出循环 - }; - - /// - /// 线程主体,每个线程维护一个task queue。 - /// - class Thread ASURA_FINAL - : public AEScripting::Portable - { - public: - - LUAX_DECL_FACTORY(Thread); - - Thread(lua_State* luaThread, ThreadType type = THREAD_TYPE_DEFERRED, uint sleepTime = 1, const std::string& name = ""); - ~Thread(); - - bool AddTask(Task* task); - /// - /// 获得等待处理的任务数 - /// - uint GetTaskCount(); - - void Idle(); - - /// - /// 创建内核对象,并运行。如果是daemon,会等待手动stop。否则会在某时刻队列完成后自动stop。 - /// - bool Start(bool daemon = true, uint32 stacksize = 0); - - /// - /// 非同步线程控制,不是实时的。可能需要在主线程里使用Is函数确认到达指定状态。 - /// - void Pause(); - void Resume(); - void Stop(); - - /// - /// 同步线程控制,会等返回来信号后继续向下执行。会造成主线程等待。 - /// - void PauseSync(); - void ResumeSync(); - void StopSync(); - - /// - /// 父线程等待本线程结束后才继续执行。 - /// - void Join(); - - ThreadState GetState(); - - /// - /// 逻辑层面的线程状态: - /// 1: Idle(空闲),线程创建后的默认状态,可以随时加任务并且Start。 - /// 2: Running(运行),内核对象呗创建,已经处于内核调度中,并处理具体Task。 - /// 3: Paused(暂停),依然存在于内核中,但是跳过了对任务的处理,逻辑上暂停。 - /// 4: Stopped(停止),依然存在于内核中,但是已经无法继续处理任务。 - /// - bool IsIdle(); - bool IsRunning(); - bool IsPaused(); - bool IsStopped(); - - bool IsCurrent(); - - /// - /// 执行任务队列。 - /// - void Process(); - - const std::string& GetName(); - - /// - /// 回调。 - /// - void Post(); - - /// - /// 休眠函数 - /// - void Sleep(uint ms); - - /// - /// 设置休眠时间 - /// - void SetSleepTime(uint ms); - - private: - - //----------------------------------------------------------------------------// - - LUAX_DECL_ENUM(ThreadType); - LUAX_DECL_ENUM(ThreadState); - - LUAX_DECL_METHOD(_New); - LUAX_DECL_METHOD(_AddTask); - LUAX_DECL_METHOD(_Start); - LUAX_DECL_METHOD(_Idle); - LUAX_DECL_METHOD(_Pause); - LUAX_DECL_METHOD(_Resume); - LUAX_DECL_METHOD(_Stop); - LUAX_DECL_METHOD(_Join); - LUAX_DECL_METHOD(_IsRunning); - LUAX_DECL_METHOD(_IsPaused); - LUAX_DECL_METHOD(_IsStopped); - LUAX_DECL_METHOD(_IsCurrent); - LUAX_DECL_METHOD(_Sleep); - LUAX_DECL_METHOD(_Post); - LUAX_DECL_METHOD(_GetName); - LUAX_DECL_METHOD(_GetType); - LUAX_DECL_METHOD(_GetState); - LUAX_DECL_METHOD(_SetSleepTime); - - //----------------------------------------------------------------------------// - - /// - /// 此次运行是否是守护模式。 - /// - bool mIsDaemon; - - lua_State* mLuaThread; - - ThreadImpl* mImpl; - std::string mName; - ThreadType mType; - uint mSleepTime; - - ThreadState mState; - Mutex mStateMutex; - - /// - /// 同步控制相关的信号量 - /// - Semaphore mSemPause; - Semaphore mSemResume; - Semaphore mSemStop; - - /// - /// 待处理的任务队列。 - /// - std::queue mTaskQueue; - Mutex mTaskQueueMutex; - - /// - /// 延迟模式使用 - /// - std::queue mFinishedTasks; - Mutex mFinishedMutex; - - /// - /// 立即模式使用,回调使用的lua线程 - /// - lua_State* mCallbackThread; - Luax::LuaxMemberRef mCallbackThreadRef; - - }; - - /// - /// 线程的具体实现,对用户是透明的,一共准备了四种策略: - /// 1: win32 - /// 2: posix - /// 3: SDL - /// 4: std::thread - /// - 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 void Sleep(uint ms) = 0; - - virtual bool IsRunning() = 0; - virtual bool IsCurrent() = 0; - - }; - - } -} - -#endif \ No newline at end of file -- cgit v1.1-26-g67d0