100#if qStroika_Foundation_Debug_AssertionsChecked
118 nonvirtual
void Reset ();
127 nonvirtual
bool GetIsSet () const noexcept;
142 nonvirtual
bool PeekIsSet () const noexcept;
152 nonvirtual
void Set ();
168 nonvirtual
void Wait (Time::DurationSeconds timeout = Time::kInfinity);
254#if qStroika_Foundation_Execution_WaitableEvent_SupportWaitForMultipleObjects
263 template <
typename CONTAINER_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
264 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAny (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::DurationSeconds timeout = Time::kInfinity);
265 template <
typename ITERATOR_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
266 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAny (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart, ITERATOR_OF_WAITABLE_EVENTS waitableEventsEnd,
277 template <
typename CONTAINER_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
278 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAnyUntil (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::TimePointSeconds timeoutAt);
279 template <
typename ITERATOR_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
280 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAnyUntil (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart,
291 template <
typename CONTAINER_OF_WAITABLE_EVENTS>
292 static void WaitForAll (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::DurationSeconds timeout = Time::kInfinity);
293 template <
typename ITERATOR_OF_WAITABLE_EVENTS>
294 static void WaitForAll (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart, ITERATOR_OF_WAITABLE_EVENTS waitableEventsEnd,
305 template <
typename CONTAINER_OF_WAITABLE_EVENTS>
306 static void WaitForAllUntil (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::TimePointSeconds timeoutAt);
307 template <
typename ITERATOR_OF_WAITABLE_EVENTS>
308 static void WaitForAllUntil (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart, ITERATOR_OF_WAITABLE_EVENTS waitableEventsEnd,
312 static inline SpinLock sExtraWaitableEventsMutex_;
316 DISABLE_COMPILER_MSC_WARNING_START (4996);
317 DISABLE_COMPILER_GCC_WARNING_START (
"GCC diagnostic ignored \"-Wdeprecated-declarations\"");
318 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdeprecated-declarations\"");
319 enum class [[deprecated (
"Since Stroika v3.0d4 - use WaitAndReset")]] ResetType {
324 [[deprecated (
"Since Stroika v3.0d4 - use WaitAndReset")]]
static constexpr ResetType eAutoReset = ResetType::eAutoReset;
325 [[deprecated (
"Since Stroika v3.0d4 - use WaitAndReset")]]
static constexpr ResetType eManualReset = ResetType::eManualReset;
326 [[deprecated (
"since v3.0d4 - use WaitStatus::eTimeout")]]
static constexpr WaitStatus kWaitQuietlyTimeoutResult{WaitStatus::eTimeout};
327 [[deprecated (
"since v3.0d4 - use WaitStatus::eTriggered")]]
static constexpr WaitStatus kWaitQuietlySetResult{WaitStatus::eTriggered};
328 DISABLE_COMPILER_MSC_WARNING_END (4996);
329 DISABLE_COMPILER_GCC_WARNING_END (
"GCC diagnostic ignored \"-Wdeprecated-declarations\"");
330 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdeprecated-declarations\"");
334 mutable ConditionVariable<> fConditionVariable{};
335 bool fTriggered{
false};
337 nonvirtual
void Reset ();
338 nonvirtual
bool GetIsSet () const noexcept;
339 nonvirtual
bool PeekIsSet () const noexcept;
340 nonvirtual
void Set ();
341 nonvirtual
void WaitUntil (Time::TimePointSeconds timeoutAt);
342 nonvirtual
WaitStatus WaitUntilQuietly (Time::TimePointSeconds timeoutAt);
345#if qStroika_Foundation_Execution_WaitableEvent_SupportWaitForMultipleObjects
346 forward_list<shared_ptr<WE_>> fExtraWaitableEvents_;