diff --git a/Sources/Plasma/CoreLib/hsThread.h b/Sources/Plasma/CoreLib/hsThread.h index 59514e18..838961b0 100644 --- a/Sources/Plasma/CoreLib/hsThread.h +++ b/Sources/Plasma/CoreLib/hsThread.h @@ -175,19 +175,34 @@ class hsEvent { std::mutex fMutex; std::condition_variable fCondition; + bool fEvent; public: - hsEvent() { } + hsEvent() : fEvent(false) { } inline void Wait() { std::unique_lock lock(fMutex); - fCondition.wait(lock); + fCondition.wait(lock, [this]() { return fEvent; }); + fEvent = false; + } + + template + inline bool Wait(const std::chrono::duration<_Rep, _Period> &duration) + { + std::unique_lock lock(fMutex); + + bool result = fCondition.wait_for(lock, duration, [this]() { return fEvent; }); + if (result) + fEvent = false; + + return result; } inline void Signal() { std::unique_lock lock(fMutex); + fEvent = true; fCondition.notify_one(); } };