私の状況では、Lua (C) API を使用して、文字列に保持されたスクリプトを実行しています。ユーザーがスクリプトの実行を終了できるようにしたいのですが (スクリプトに無限ループが含まれている場合、これは必須です)、どうすればよいですか?
lua_State *Lua = lua_open();
char * code;
// Initialisation code
luaL_dostring(L, code);
私の状況では、Lua (C) API を使用して、文字列に保持されたスクリプトを実行しています。ユーザーがスクリプトの実行を終了できるようにしたいのですが (スクリプトに無限ループが含まれている場合、これは必須です)、どうすればよいですか?
lua_State *Lua = lua_open();
char * code;
// Initialisation code
luaL_dostring(L, code);
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);