// @desc スレッドが生きているかどうか確認する // @param self スレッドインスタンス // @result 生死の真偽値 // @sample if th:is_alive() then // @sample print("ALIVE!") // @sample end private static int L_lthread_is_alive(ILuaState lua) { LuaThread th = get_internal <LuaThread>(lua, 1); lua.PushBoolean(!th.isExit); return(1); }
// @desc スレッドを開始する // @param function スレッドで実行する関数 // @result スレッドインスタンス // @sample local th = lthread.start(function() print("HOGE") end) private static int L_lthread_start(ILuaState lua) { LuaScriptBehaviour lsb = LuaScriptBehaviour.FindFromState(lua); LuaThread th = lsb.StartThread(lua); NewLuaThread(lua, th); return(1); }
// 渡された関数で新規スレッドを起動する public LuaThread StartThread(ILuaState lua) { LuaThread th = _vm.CreateThread(this); _threads.Add(th); ILuaState newlua = th.luaState; lua.XMove(newlua, 1); th.Start(0); return(th); }
private void register_common_libs() { LuaThread.LoadLibs(_luaState); LuaSystemLib.Load(_luaState); // <-- @todo この書式に統一したい LuaGameObject.RegisterClass(_luaState); LuaComponentBehaviour.RegisterClass(_luaState); LuaComponentTransform.RegisterClass(_luaState); LuaComponentRectTransform.RegisterClass(_luaState); LuaComponentUI.RegisterClass(_luaState); LuaMathf.LoadLibs(_luaState); LuaUtilLib.Load(_luaState); }
// void Awake() { _mainThread = retain_vm().CreateThread(this); _lua = _mainThread.luaState; _behaviours[_lua] = this; //if (!_mainThread.luaState.CheckStack(1000)) { // Debug.LogError("CANT ALLOC STACK"); //} if (!string.IsNullOrEmpty(_luaScriptFile)) { load_script_file(_luaScriptFile); } invoke_script_function_cached(LuaScript.CachedFunction.AWAKE); }
// private static int NewLuaThread(ILuaState lua, LuaThread th) { // o = {} lua.NewTable(); // setmetatable(o, self) //lua.PushValue(-2); // self lua.GetGlobal(KlassName); lua.SetMetaTable(-2); // -> o // self.__index = self lua.GetMetaTable(-1); lua.SetField(-1, "__index"); // return o if (th != null) { set_internal <LuaThread>(lua, -2, th); } return(1); }
private void update_lua_threads() { if (_errorOccured) { return; } foreach (LuaThread t in _threads) { if (t.isRunning) { _currentThread = t; t.Resume(); if (t.isError) { _errorOccured = true; } _currentThread = null; } } _threads.RemoveAll((t) => t.isExit); }
// public LuaThread CreateThread(LuaScriptBehaviour behaviour) { LuaThread th = new LuaThread(_luaState, behaviour); return(th); }