11 #include "threads/Condition.h" 13 #include <initializer_list> 38 volatile bool signaled;
39 unsigned int numWaits = 0;
41 CCriticalSection groupListMutex;
42 std::unique_ptr<std::vector<XbmcThreads::CEventGroup*>> groups;
45 CCriticalSection mutex;
53 inline bool prepReturn()
56 if (!manualReset && numWaits == 0)
65 inline CEvent(
bool manual =
false,
bool signaled_ =
false)
66 : manualReset(manual), signaled(signaled_)
72 std::unique_lock<CCriticalSection> lock(mutex);
83 std::unique_lock<CCriticalSection> lock(mutex);
93 template<
typename Rep,
typename Period>
94 inline bool Wait(std::chrono::duration<Rep, Period> duration)
96 std::unique_lock<CCriticalSection> lock(mutex);
111 std::unique_lock<CCriticalSection> lock(mutex);
125 std::unique_lock<CCriticalSection> lock(mutex);
140 std::vector<CEvent*> events;
143 CCriticalSection mutex;
145 unsigned int numWaits{0};
148 inline void Set(
CEvent* child)
150 std::unique_lock<CCriticalSection> l(mutex);
152 actualCv.notifyAll();
155 friend class ::CEvent;
165 CEventGroup(std::initializer_list<CEvent*> events);
185 template<
typename Rep,
typename Period>
188 std::unique_lock<CCriticalSection> lock(mutex);
197 for (
auto* cur : events)
199 std::unique_lock<CCriticalSection> lock2(cur->mutex);
208 if (duration == std::chrono::duration<Rep, Period>::max())
209 actualCv.wait(mutex, [
this]() {
return signaled !=
nullptr; });
211 actualCv.wait(mutex, duration, [
this]() {
return signaled !=
nullptr; });
222 signaled->
Wait(std::chrono::duration<Rep, Period>::zero());
235 std::unique_lock<CCriticalSection> lock(mutex);
bool Signaled()
Returns true if Event has been triggered and not reset, false otherwise.
Definition: Event.h:81
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
int getNumWaits()
This is mostly for testing.
Definition: Event.h:123
bool Wait(std::chrono::duration< Rep, Period > duration)
This will wait up to 'duration' for the Event to be triggered.
Definition: Event.h:94
CEventGroup is a means of grouping CEvents to wait on them together.
Definition: Event.h:138
bool Wait()
This will wait for the Event to be triggered.
Definition: Event.h:109
Definition: SmartPlayList.cpp:137
This is a thin wrapper around std::condition_variable_any.
Definition: Condition.h:26
int getNumWaits()
This is mostly for testing.
Definition: Event.h:233
CEvent * wait(std::chrono::duration< Rep, Period > duration)
locking is ALWAYS done in this order: CEvent::groupListMutex -> CEventGroup::mutex -> CEvent::mutex ...
Definition: Event.h:186
Definition: RecursiveMutex.cpp:11