gpt4 book ai didi

c++ - 如何干净利落地结束 Lua 线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:20 27 4
gpt4 key购买 nike

我的情况是,我正在使用 Lua (C) API 来执行保存在字符串中的脚本。我希望用户能够终止脚本的执行(如果脚本包含无限循环,这是必不可少的),我该怎么做?

lua_State *Lua = lua_open();
char * code;
// Initialisation code
luaL_dostring(L, code);

最佳答案

在线上 Hook 是不够的。此代码是单行,但会永远循环:

    while true do end

您需要设置一个指令计数 Hook 。如果我没记错的话,应该是

    lua_sethook(Lua, &LineHookFunc, LUA_MASKCOUNT, NUM_INSTRUCTIONS);

您希望选择 NUM_INSTRUCTIONS 条,这样它就不会太小(否则会产生性能开销)也不会太大(否则您会等待太久直到停止)。

有关仅限 Lua 的实现,请参阅 this library .

如果您想针对不受信任的 Lua 代码添加更多保护,请在谷歌上搜索“Lua 沙盒”——它不仅可以防止无限循环。

关于c++ - 如何干净利落地结束 Lua 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/862256/

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