From 66c5fdc564dd892ed265132d6c1378dbe3cebcee Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 27 Mar 2019 09:07:54 +0800 Subject: *misc --- .../libs/asura-lib-utils/threading/coroutine.cpp | 0 source/libs/asura-lib-utils/threading/coroutine.h | 31 +++++++++++ source/libs/asura-lib-utils/threading/mutex.cpp | 0 source/libs/asura-lib-utils/threading/mutex.h | 21 ++++++++ source/libs/asura-lib-utils/threading/thread.cpp | 14 +++++ source/libs/asura-lib-utils/threading/thread.h | 60 ++++++++++++++++++++++ .../threading/thread_impl_posix.cpp | 0 .../asura-lib-utils/threading/thread_impl_posix.h | 0 .../asura-lib-utils/threading/thread_impl_sdl.cpp | 0 .../asura-lib-utils/threading/thread_impl_sdl.h | 0 .../asura-lib-utils/threading/thread_impl_std.cpp | 0 .../asura-lib-utils/threading/thread_impl_std.h | 0 .../threading/thread_impl_win32.cpp | 0 .../asura-lib-utils/threading/thread_impl_win32.h | 35 +++++++++++++ .../libs/asura-lib-utils/threading/thread_task.cpp | 0 .../libs/asura-lib-utils/threading/thread_task.h | 27 ++++++++++ 16 files changed, 188 insertions(+) create mode 100644 source/libs/asura-lib-utils/threading/coroutine.cpp create mode 100644 source/libs/asura-lib-utils/threading/coroutine.h create mode 100644 source/libs/asura-lib-utils/threading/mutex.cpp create mode 100644 source/libs/asura-lib-utils/threading/mutex.h create mode 100644 source/libs/asura-lib-utils/threading/thread.cpp create mode 100644 source/libs/asura-lib-utils/threading/thread.h create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_posix.cpp create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_posix.h create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_sdl.cpp create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_sdl.h create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_std.cpp create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_std.h create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_win32.cpp create mode 100644 source/libs/asura-lib-utils/threading/thread_impl_win32.h create mode 100644 source/libs/asura-lib-utils/threading/thread_task.cpp create mode 100644 source/libs/asura-lib-utils/threading/thread_task.h (limited to 'source/libs/asura-lib-utils/threading') diff --git a/source/libs/asura-lib-utils/threading/coroutine.cpp b/source/libs/asura-lib-utils/threading/coroutine.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/coroutine.h b/source/libs/asura-lib-utils/threading/coroutine.h new file mode 100644 index 0000000..1ac6b21 --- /dev/null +++ b/source/libs/asura-lib-utils/threading/coroutine.h @@ -0,0 +1,31 @@ +#ifndef __ASURA_COROUTINE_H__ +#define __ASURA_COROUTINE_H__ + +#include + +namespace AsuraEngine +{ + namespace Threading + { + + /// + /// lua协程,用来做一些逻辑并发操作。 + /// + class Coroutine ASURA_FINAL + : public AEScripting::Portable + { + public: + + LUAX_DECL_FACTORY(Coroutine); + + private: + + LUAX_DECL_METHOD(_New); + LUAX_DECL_METHOD(_Run); + + }; + + } +} + +#endif \ No newline at end of file diff --git a/source/libs/asura-lib-utils/threading/mutex.cpp b/source/libs/asura-lib-utils/threading/mutex.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/mutex.h b/source/libs/asura-lib-utils/threading/mutex.h new file mode 100644 index 0000000..893c6e5 --- /dev/null +++ b/source/libs/asura-lib-utils/threading/mutex.h @@ -0,0 +1,21 @@ +#ifndef __ASURA_MUTEX_H__ +#define __ASURA_MUTEX_H__ + +namespace AsuraEngine +{ + namespace Threading + { + + class Mutex + { + public: + + void Lock(); + void Unlock(); + + }; + + } +} + +#endif \ No newline at end of file diff --git a/source/libs/asura-lib-utils/threading/thread.cpp b/source/libs/asura-lib-utils/threading/thread.cpp new file mode 100644 index 0000000..c77f3ab --- /dev/null +++ b/source/libs/asura-lib-utils/threading/thread.cpp @@ -0,0 +1,14 @@ +#include "thread.h" + +namespace AsuraEngine +{ + namespace Threading + { + + bool Thread::Enqueue(ThreadTask* task) + { + + } + + } +} \ No newline at end of file diff --git a/source/libs/asura-lib-utils/threading/thread.h b/source/libs/asura-lib-utils/threading/thread.h new file mode 100644 index 0000000..0058144 --- /dev/null +++ b/source/libs/asura-lib-utils/threading/thread.h @@ -0,0 +1,60 @@ +#ifndef __ASURA_THREAD_H__ +#define __ASURA_THREAD_H__ + +#include +#include + +#include "thread_task.h" + +namespace AsuraEngine +{ + namespace Threading + { + + class ThreadImpl; + + /// + /// 线程主体,每个线程维护一个task queue。 + /// + class Thread ASURA_FINAL + : public AEScripting::Portable + { + public: + + LUAX_DECL_FACTORY(Thread); + + bool Enqueue(ThreadTask* task); + + void Run(); + + private: + + /// + /// 任务队列。 + /// + std::queue mTaskQueue; + + ThreadImpl* mImpl; + + LUAX_DECL_METHOD(_Enqueue); + LUAX_DECL_METHOD(_Run); + + }; + + /// + /// 线程的具体实现,对用户是透明的,一共准备了四种策略: + /// 1: win32 + /// 2: posix + /// 3: SDL + /// 4: std::thread + /// + ASURA_ABSTRACT class ThreadImpl + { + public: + + }; + + } +} + +#endif \ No newline at end of file diff --git a/source/libs/asura-lib-utils/threading/thread_impl_posix.cpp b/source/libs/asura-lib-utils/threading/thread_impl_posix.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_impl_posix.h b/source/libs/asura-lib-utils/threading/thread_impl_posix.h new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_impl_sdl.cpp b/source/libs/asura-lib-utils/threading/thread_impl_sdl.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_impl_sdl.h b/source/libs/asura-lib-utils/threading/thread_impl_sdl.h new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_impl_std.cpp b/source/libs/asura-lib-utils/threading/thread_impl_std.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_impl_std.h b/source/libs/asura-lib-utils/threading/thread_impl_std.h new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_impl_win32.cpp b/source/libs/asura-lib-utils/threading/thread_impl_win32.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_impl_win32.h b/source/libs/asura-lib-utils/threading/thread_impl_win32.h new file mode 100644 index 0000000..3dd2a8e --- /dev/null +++ b/source/libs/asura-lib-utils/threading/thread_impl_win32.h @@ -0,0 +1,35 @@ +#ifndef __ASURA_THREAD_WIN32_H__ +#define __ASURA_THREAD_WIN32_H__ + +#include "../utils_config.h" + +#if ASURA_THREAD_WIN32 + +#include +#include "thread.h" + +namespace AsuraEngine +{ + namespace Threading + { + + /// + /// Thread的win32实现。 + /// + class ThreadImplWin32 : public ThreadImpl + { + public: + + + private: + + HANDLE mHandle; + + }; + + } +} + +#endif // #if ASURA_THREAD_WIN32 + +#endif \ No newline at end of file diff --git a/source/libs/asura-lib-utils/threading/thread_task.cpp b/source/libs/asura-lib-utils/threading/thread_task.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/libs/asura-lib-utils/threading/thread_task.h b/source/libs/asura-lib-utils/threading/thread_task.h new file mode 100644 index 0000000..35e159c --- /dev/null +++ b/source/libs/asura-lib-utils/threading/thread_task.h @@ -0,0 +1,27 @@ +#ifndef __ASURA_THRAD_TASK_H__ +#define __ASURA_THRAD_TASK_H__ + +#include + +namespace AsuraEngine +{ + namespace Threading + { + + /// + /// 希望放在另一个线程处理的任务,继承Task并重写Execute方法。 + /// + ASURA_ABSTRACT class ThreadTask + { + public: + + virtual bool Execute() = 0; + + }; + + } +} + +namespace AEThreading = AsuraEngine::Threading; + +#endif \ No newline at end of file -- cgit v1.1-26-g67d0