gpt4 book ai didi

lua - 强制 Lua 脚本退出

转载 作者:行者123 更新时间:2023-12-02 01:31:24 29 4
gpt4 key购买 nike

如何结束长时间运行的 Lua 脚本?

我有两个线程,一个运行主程序,另一个控制用户提供的 Lua 脚本。我需要终止正在运行 Lua 的线程,但首先我需要退出脚本。

有没有办法强制脚本退出?

我读到建议的方法是返回 Lua 异常。但是,不能保证用户的脚本将调用 api 函数(它可能处于紧密的繁忙循环中)。此外,用户可以使用 pcall 来防止错误导致其脚本退出。

最佳答案

您可以使用setjmplongjump,就像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;
}

关于lua - 强制 Lua 脚本退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913999/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com