diff --git a/include/TLuaEngine.h b/include/TLuaEngine.h index 8a87c7d..ade2d25 100644 --- a/include/TLuaEngine.h +++ b/include/TLuaEngine.h @@ -105,7 +105,8 @@ public: return LuaEventsCount - GetLuaStateCount(); } - static void WaitForAll(std::vector>& Results); + static void WaitForAll(std::vector>& Results, + const std::chrono::high_resolution_clock::duration& Max = std::chrono::hours(std::numeric_limits().max())); void ReportErrors(const std::vector>& Results); bool HasState(TLuaStateId StateId); [[nodiscard]] std::shared_ptr EnqueueScript(TLuaStateId StateID, const TLuaChunk& Script); diff --git a/src/TLuaEngine.cpp b/src/TLuaEngine.cpp index d814a22..f3bd977 100644 --- a/src/TLuaEngine.cpp +++ b/src/TLuaEngine.cpp @@ -145,10 +145,16 @@ TLuaStateId TLuaEngine::GetStateIDForPlugin(const fs::path& PluginPath) { return ""; } -void TLuaEngine::WaitForAll(std::vector>& Results) { +void TLuaEngine::WaitForAll(std::vector>& Results, const std::chrono::high_resolution_clock::duration& max) { + size_t ms = 0; + bool Cancelled = false; for (const auto& Result : Results) { - while (!Result->Ready) { + while (!Result->Ready && !Cancelled) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); + ms += 10; + if (std::chrono::milliseconds(ms) > max) { + Cancelled = true; + } } if (Result->Error) { if (Result->ErrorMessage != BeamMPFnNotFoundError) {