1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#include "Signal.h"
#include <chrono>
#include <algorithm>
void mac_signal::wait()
{
sleepers++;
{
std::unique_lock<std::mutex> lk(mtx);
cv.wait(lk);
}
sleepers--;
}
void mac_signal::wait_for(spring_time t)
{
sleepers++;
{
std::chrono::nanoseconds ns(t.toNanoSecsi());
std::unique_lock<std::mutex> lk(mtx);
cv.wait_for(lk, ns);
}
sleepers--;
}
void mac_signal::notify_all(const int min_sleepers)
{
if (sleepers.load() < std::max(1, min_sleepers))
return;
cv.notify_all();
}
|