C++与Lua多线程游戏交互场景探讨
2018-01-17 21:22
162 查看
本文探讨的是关于多线程下Lua的消息队列的通信方式,以及全局静态对象的在MMO游戏中处理的想法。
多线程在lua中的代码表达
用一个Lua对象来表示一条真实的物理线程(不是协程的概念),每条物理线程有对应单独的lua_State, 其中主线程的lua_State通过:
初步简单测试,上述实现是共用_G全局变量,可能会出现全局变量多线程访问问题,按情况加个全局变量访问锁
多线程中单例对象的代码表达
用来表示真实的物理线程的Lua对象用来记录该线程用到的非玩家的单例对象,对于场景逻辑的线程,可以根据该线程当前处理哪些场景来确定需要初始化创建哪些单例对象,对于公共的背包线程,则只要背包线程用到的单例对象就创建,可以在初始化前先由开发人员定义单例对象所属的场景ID或线程类型,根据这个信息来实现初始化创建对象就可以
多线程在lua中的代码表达
用一个Lua对象来表示一条真实的物理线程(不是协程的概念),每条物理线程有对应单独的lua_State, 其中主线程的lua_State通过:
lua_State *main_thread = luaL_newstate()接口创建,其他线程的lua_State则通过:
lua_State *sub_thread = lua_newthread(main_thread)接口创建。
初步简单测试,上述实现是共用_G全局变量,可能会出现全局变量多线程访问问题,按情况加个全局变量访问锁
多线程中单例对象的代码表达
用来表示真实的物理线程的Lua对象用来记录该线程用到的非玩家的单例对象,对于场景逻辑的线程,可以根据该线程当前处理哪些场景来确定需要初始化创建哪些单例对象,对于公共的背包线程,则只要背包线程用到的单例对象就创建,可以在初始化前先由开发人员定义单例对象所属的场景ID或线程类型,根据这个信息来实现初始化创建对象就可以
相关文章推荐
- lua 与 c/c++ 交互(5) lua调用c/c++
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
- c++&lua交互
- Lua和C++交互详解
- Lua和C++交互详细总结
- Lua与c/c++交互
- Lua和C++交互详细总结
- Lua与C++的交互
- LUA和C/C++交互-注册回调函数
- 【COCOS2DX-LUA 脚本开发之十一】C/C++与Lua之间进行数据函数交互 推荐
- C/C++与Lua之间进行数据函数交互以及解决“PANIC: unprotected error in call to Lua API
- C++与Lua交互(三)
- Lua和C++交互 学习记录之四:全局table交互
- lua和C++的交互(1)
- C++与Lua交互(五)
- Lua和C/C++的交互
- [lua] 使用lua string作为二进制buffer和c/c++交互
- 使用cocos2d-x 3.x lua 开发时 lua与c++交互
- 实验三 游戏场景的交互控制
- Lua和C++交互详细总结