Как я могу закончить поток Lua чисто?

То, что делает ваш текущий код, заменяет все вхождения / на / - это вообще ничего не делает. Вам нужно заменить вхождения на _:

var str = "One/Two/Three";
str = str.replace(/\//g, '_');
console.log(str);

5
задан CiscoIPPhone 14 May 2009 в 08:45
поделиться

2 ответа

Вы можете использовать ловушку для обратного вызова C каждый раз, когда lua выполняет строку скрипта. В этой функции перехвата вы можете проверить, хочет ли пользователь выйти, и вызвать lua_error, если он это сделал.

static bool ms_quit = false;

void IWantToQuit()
{
    ms_quit = true;
}

void LineHookFunc(lua_State *L, lua_Debug *ar)
{
    if(ar.event == LUA_HOOKLINE)
        if(ms_quit == true)
            luaL_error(L, "Too Many Lines Error");
}
//...

lua_State *Lua = lua_open();
char * code;
// Initialisation code
lua_sethook(Lua, &LineHookFunc, LUA_MASKLINE, 0);
luaL_dostring(L, code);
7
ответ дан 18 December 2019 в 12:01
поделиться

Недостаточно привязки к стропам. Этот код представляет собой одну строку, но повторяется бесконечно:

    while true do end

Вам необходимо установить ловушку подсчета инструкций. Если я не ошибаюсь, это будет

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

. Вы хотите выбрать NUM_INSTRUCTIONS, чтобы оно не было слишком маленьким (иначе вы получите накладные расходы на производительность) и не слишком большим (иначе вы будете ждать слишком долго до остановки).

Для соответствующей реализации только Lua см. эту библиотеку .

Если вы хотите добавить дополнительную защиту от ненадежного кода Lua, поищите в Google "песочницу Lua" - это больше, чем просто бесконечный цикл предотвращение.

8
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: