1
0
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-18 11:19:10 +00:00

This version of hsEvent more accurately matches the previous (Win32)

behavior, and also serves as a proper binary semaphore.
This commit is contained in:
2014-08-20 20:15:52 -07:00
parent a1303d6d23
commit 658d5b6f71

View File

@ -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<std::mutex> lock(fMutex);
fCondition.wait(lock);
fCondition.wait(lock, [this]() { return fEvent; });
fEvent = false;
}
template <class _Rep, class _Period>
inline bool Wait(const std::chrono::duration<_Rep, _Period> &duration)
{
std::unique_lock<std::mutex> lock(fMutex);
bool result = fCondition.wait_for(lock, duration, [this]() { return fEvent; });
if (result)
fEvent = false;
return result;
}
inline void Signal()
{
std::unique_lock<std::mutex> lock(fMutex);
fEvent = true;
fCondition.notify_one();
}
};