使用全局lua_State *变量

时间:2019-07-16 22:11:13

标签: 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()之外初始化状态变量时什么也没发生。

1 个答案:

答案 0 :(得分:4)

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

如果您确实需要使Lua状态成为全局状态,那么initLua应该没有任何参数。您的问题是由您分配给参数L而不是全局变量引起的。

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