使用全局 lua_State* 变量

Using a global lua_State* variable

本文关键字:State 变量 lua 全局      更新时间:2023-10-16

我想在我的程序中使用一个全局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 状态全局,那么initLua不应该有任何参数。您的问题是由您分配给参数 L 而不是全局变量这一事实引起的。

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