Forcing a Lua script to exit

后端 未结 10 952
长情又很酷
长情又很酷 2020-12-23 18:49

How do you end a long running Lua script?

I have two threads, one runs the main program and the other controls a user supplied Lua script. I need to kill the thread

10条回答
  •  隐瞒了意图╮
    2020-12-23 19:04

    You could use setjmp and longjump, just like the Lua library does internally. That will get you out of pcalls and stuff just fine without need to continuously error, preventing the script from attempting to handle your bogus errors and still getting you out of execution. (I have no idea how well this plays with threads though.)

    #include 
    #include 
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
    
    jmp_buf place;
    
    void hook(lua_State* L, lua_Debug *ar)
    {
        static int countdown = 10;
        if (countdown > 0)
        {
            --countdown;
            printf("countdown: %d!\n", countdown);
        }
        else
        {
            longjmp(place, 1);
        }
    }
    
    int main(int argc, const char *argv[])
    {
        lua_State* L = luaL_newstate();
        luaL_openlibs(L);
        lua_sethook(L, hook, LUA_MASKCOUNT, 100);
    
        if (setjmp(place) == 0)
            luaL_dostring(L, "function test() pcall(test) print 'recursing' end pcall(test)");
    
        lua_close(L);
        printf("Done!");
        return 0;
    }
    

提交回复
热议问题