mirror of
https://github.com/libretro/Mesen.git
synced 2024-12-13 11:57:09 +00:00
41 lines
914 B
C++
41 lines
914 B
C++
#include "stdafx.h"
|
|
#include "AutoResetEvent.h"
|
|
|
|
AutoResetEvent::AutoResetEvent()
|
|
{
|
|
_signaled = false;
|
|
}
|
|
|
|
AutoResetEvent::~AutoResetEvent()
|
|
{
|
|
//Can't signal here, seems to cause process crashes when this occurs while the
|
|
//application is exiting.
|
|
}
|
|
|
|
void AutoResetEvent::Wait(int timeoutDelay)
|
|
{
|
|
std::unique_lock<std::mutex> lock(_mutex);
|
|
if(timeoutDelay == 0) {
|
|
//Wait until signaled
|
|
_signal.wait(lock, [this] { return _signaled; });
|
|
} else {
|
|
//Wait until signaled or timeout
|
|
auto timeoutTime = std::chrono::system_clock::now() + std::chrono::duration<int, std::milli>(timeoutDelay);
|
|
_signal.wait_until(lock, timeoutTime, [this] { return _signaled; });
|
|
}
|
|
_signaled = false;
|
|
}
|
|
|
|
void AutoResetEvent::Reset()
|
|
{
|
|
std::unique_lock<std::mutex> lock(_mutex);
|
|
_signaled = false;
|
|
}
|
|
|
|
void AutoResetEvent::Signal()
|
|
{
|
|
std::unique_lock<std::mutex> lock(_mutex);
|
|
_signaled = true;
|
|
_signal.notify_all();
|
|
}
|