5

私の状況では、Lua (C) API を使用して、文字列に保持されたスクリプトを実行しています。ユーザーがスクリプトの実行を終了できるようにしたいのですが (スクリプトに無限ループが含まれている場合、これは必須です)、どうすればよいですか?

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

2 に答える 2

7

lua がスクリプトの行を実行するたびに、フックを使用して C にコールバックできます。このフック関数では、ユーザーが終了したいかどうかを確認し、終了した場合は 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);
于 2009-05-14T10:40:40.670 に答える