Files
chatterino2/src/util/OnceFlag.cpp

47 lines
972 B
C++

#include "util/OnceFlag.hpp"
namespace chatterino {
OnceFlag::OnceFlag() = default;
void OnceFlag::set()
{
{
std::unique_lock guard(this->mutex);
this->flag.store(true, std::memory_order::relaxed);
}
this->condvar.notify_all();
}
bool OnceFlag::waitFor(std::chrono::milliseconds ms)
{
std::unique_lock lock(this->mutex);
if (this->flag.load(std::memory_order::relaxed))
{
return true;
}
return this->condvar.wait_for(lock, ms, [this] {
return this->flag.load(std::memory_order::relaxed);
});
}
void OnceFlag::wait()
{
std::unique_lock lock(this->mutex);
if (this->flag.load(std::memory_order::relaxed))
{
return;
}
this->condvar.wait(lock, [this] {
return this->flag.load(std::memory_order::relaxed);
});
}
bool OnceFlag::isSet()
{
std::unique_lock lock(this->mutex);
return this->flag.load(std::memory_order::relaxed);
}
} // namespace chatterino