强制Lua脚本退出
发布时间:2020-12-15 00:20:27 所属栏目:大数据 来源:网络整理
导读:你如何结束一个长期运行的Lua脚本? 我有两个线程,一个运行主程序,另一个控制用户提供的Lua脚本。我需要杀死正在运行Lua的线程,但首先我需要脚本退出。 有没有办法强制脚本退出? 我已经阅读,建议的方法是返回一个Lua异常。然而,它不保证用户的脚本将调
你如何结束一个长期运行的Lua脚本?
我有两个线程,一个运行主程序,另一个控制用户提供的Lua脚本。我需要杀死正在运行Lua的线程,但首先我需要脚本退出。 有没有办法强制脚本退出? 我已经阅读,建议的方法是返回一个Lua异常。然而,它不保证用户的脚本将调用api函数(它可能在一个紧张的忙循环)。此外,用户可以通过使用pcall来防止错误导致他的脚本退出。 解决方法
你可以使用setjmp和longjump,就像Lua库在内部。这将让你从pcalls和东西很好,不需要连续的错误,防止脚本尝试处理你的虚假错误,仍然让你失去执行。 (我不知道这与线程有多好)。
#include <stdio.h> #include <setjmp.h> #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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |