43 lines
805 B
C++
Raw Normal View History

2024-02-23 18:07:37 +08:00
#include "sled/synchronization/event.h"
namespace sled {
2024-03-11 16:49:23 +08:00
constexpr TimeDelta Event::kForever;
2024-02-23 18:07:37 +08:00
Event::Event() : Event(false, false) {}
Event::Event(bool manual_reset, bool initially_signaled)
: is_manual_reset_(manual_reset),
event_status_(initially_signaled)
{}
Event::~Event() {}
void
Event::Set()
{
MutexLock lock(&mutex_);
event_status_ = true;
cv_.NotifyAll();
}
void
Event::Reset()
{
MutexLock lock(&mutex_);
event_status_ = false;
}
bool
Event::Wait(TimeDelta give_up_after, TimeDelta warn_after)
{
2024-02-25 19:04:21 +08:00
MutexLock guard(&mutex_);
2024-02-23 18:07:37 +08:00
bool wait_success =
2024-02-25 19:04:21 +08:00
cv_.WaitFor(guard, give_up_after, [&] { return event_status_; });
2024-02-23 18:07:37 +08:00
if (!wait_success) { return false; }
if (!is_manual_reset_) { event_status_ = false; }
return true;
}
}// namespace sled