0

我在下面有这样的c++代码来调用lua代码

for (int i =0; i < 2000; i++)
{
    lua_getglobal(g_L, "AnalyzeScript");
    lua_pushstring(g_L, "1");
    lua_pushstring(g_L, "2");
    lua_pushstring(g_L, "3");

    if(lua_pcall(g_L,3,0,0) != 0)
    {
        //          char temp[200]={0}; sprintf(temp, "err: %s",  lua_tostring(g_L, -1));
        //          MessageBoxA(0,temp,0,0);
    }

lua 代码如下

local cnt = 0
function AnalyzeScript(foldername, filename, pOut)
    cnt = cnt + 1
    print(cnt)
end

一切都很好,除了“无法恢复死协程”(哪个协程在另一个地方)

看起来 2000 次调用 lua func 会破坏 lua 堆栈,如果我将 2000 更改为 200,则一切正常!

为什么?

4

1 回答 1

0

我无法重现您的错误。我稍微改变了代码:

/* test.c */
#include "lua.h"
#include "lauxlib.h"

void main() {
    int i;
    lua_State *g_L = luaL_newstate();
    luaL_openlibs(g_L);
    luaL_dofile(g_L, "s.lua");
    for (i =0; i < 2000; i++)
    {
        lua_getglobal(g_L, "AnalyzeScript");
        lua_pushstring(g_L, "1");
        lua_pushstring(g_L, "2");
        lua_pushstring(g_L, "3");

        if(lua_pcall(g_L,3,0,0) != 0)
        {
//          char temp[200]={0}; sprintf(temp, "err: %s",  lua_tostring(g_L, -1));
//          MessageBoxA(0,temp,0,0);
        }
    }
    lua_close (g_L);
}

它是在我的 Linux 中使用以下命令编译的(我在 /fakepath/lua-5.2.0 中安装了 Lua 发行版):

gcc test.c -I/fakepath/lua-5.2.0/src /fakepath/lua-5.2.0/src/liblua.a -lm -ldl

文件 test.lua 正是您发布的内容。也许问题出在其他地方......

于 2013-05-03T12:48:59.477 回答