c++ - 使用全局 lua_State* 变量

标签 c++ multithreading lua global-variables

我想在我的程序中使用一个全局 lua_State* 变量,通过 initLua() 函数初始化它,并使用它从 main() 运行一些 Lua 函数。当我尝试时,Lua 代码根本无法运行。将来,我想使用一个 Lua 状态数组来实现多线程,其中每个线程都有自己的 Lua 状态。

当我在 main() 中初始化 Lua 状态时,一切正常。我运行的是 W10。

在 cfg.lua 中:

function teste()
    return 10;
end

在C++中,用于设置全局状态变量*L:

void initLua(lua_State *L) {    
    L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dofile(L, "./cfg.lua");    
}

main() 中,int foo(L) 从 Lua 中调用 teste() 函数,并打印结果。

10 应该被打印出来,但是当状态变量在 main() 之外初始化时什么也没有发生。

最佳答案

首先,我强烈建议将 Lua 状态保持在本地。如果您可以从参数中看出函数使用 Lua 状态,那么阅读代码会容易得多。

如果你真的需要让 Lua state 全局化,那么 initLua 不应该有任何参数。您的问题是由于您分配给参数 L 而不是全局变量引起的。

即使您的 Lua 状态是本地的,initLua 仍然不应采用参数。它可以创建一个本地 lua_State * 变量并返回它。

关于c++ - 使用全局 lua_State* 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066094/

相关文章:

java - 如何为Java中对象的不同成员拥有不同的同步块(synchronized block)

java - 区间锁实现

c - 如何从 C 弹出/清理 Lua 调用堆栈

linker - 静态链接lua的问题

c# - 停止 SetVolumeMountPoint 打开文件资源管理器

C++11 构造函数的区别(大括号)

python - future 内部循环的状态始终处于待定状态

c++ - 了解静态链接嵌入式lua环境中lua扩展dll的构建/加载

c++ - C++中的线程共享数据

c++ - 零MQ/ZMQPP : Forward metadata with message