From 3bced067a4144381e59ce4bd0eb749eeff5ad1f4 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 28 Mar 2019 08:56:15 +0800 Subject: *misc --- source/libs/asura-lib-utils/scripting/lua_env.h | 56 +++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 source/libs/asura-lib-utils/scripting/lua_env.h (limited to 'source/libs/asura-lib-utils/scripting/lua_env.h') diff --git a/source/libs/asura-lib-utils/scripting/lua_env.h b/source/libs/asura-lib-utils/scripting/lua_env.h new file mode 100644 index 0000000..a467479 --- /dev/null +++ b/source/libs/asura-lib-utils/scripting/lua_env.h @@ -0,0 +1,56 @@ +#ifndef __ASURA_LUA_ENV_H__ +#define __ASURA_LUA_ENV_H__ + +extern "C" +{ +#include +#include +} +#include + +#include "../singleton.hpp" + +namespace AsuraEngine +{ + namespace Scripting + { + + /// + /// 程序通过这个接口访问主lua state。 + /// + class LuaEnv ASURA_FINAL : public Singleton + { + public: + + LuaEnv() : mMainState(0){}; + ~LuaEnv() {}; + + /// + /// 设置主虚拟机的主执行栈。 + /// + inline void Init(lua_State* L) { ASSERT(!mMainState); mMainState = L; }; + + inline lua_State* GetMainState() { return mMainState; }; + + private: + + /// + /// 主线程保存一个主lua虚拟机。一个Asura程序永远只有一个主虚拟机,大部分代码都在这个虚拟机中运行,且只能设置一次。 + /// 主线程\主执行栈对应的是global_State里面的: + /// + /// struct lua_State *mainthread; + /// + /// 使用lua_newstate(),会创建一个虚拟机,包含一个global_State结构,并创建一个这个虚拟机的主线程lua_State并返回。 + /// global_State由这个虚拟机的所有线程共享,除了第一个主线程由lua_newstate()创建外,其余线程由lua_newthread() + /// 创建。 + /// + lua_State* mMainState; + + }; + + } +} + +namespace AEScripting = AsuraEngine::Scripting; + +#endif \ No newline at end of file -- cgit v1.1-26-g67d0