Задать вопрос
  • Как в lua api c++, приостановить выполнение функции через определенное время?

    @egor230 Автор вопроса
    так решил
    void LUAHook(lua_State* L, lua_Debug* ar){	lua_yield(L, 0);
    };
    
    const char* LUA = R"(
    function foo()
    for i = 1, 6 do
    print(" func foo "..i.."\n")
    end 
    end
    function main()
    for i = 1, 1300 do
    print(" main ", i)  	
       	end
    end
    
    )";
    int main() {
    	lua_State* L = luaL_newstate();	luaL_openlibs(L);
    	lua_sethook(L, LUAHook, LUA_MASKCOUNT, 23);	// Добавить подсчет счетчика, который сработает после указания числа
    	checkerror(L, LUA);	
    	lua_State* L1 = lua_newthread(L);
    	int ret, ret1;
    	lua_getglobal(L, "main");// функция lua возобновляется с последней прерванной позиции.
    
    	while (true) {
    		if (ret = !0) {
    			ret = lua_resume(L, L1, 0);
    		};
    
    		if (ret == LUA_YIELD || ret1 == LUA_YIELD) {
    			lua_getglobal(L1, "foo");
    			ret1 = lua_resume(L1, L, 0);
    		}
    		if (ret == 0) {// Успешно завершение функции.
    			break;
    		}
    	};
    
    return 0;
    };
    Ответ написан
    Комментировать