92#if qStroika_Foundation_Debug_AssertionsChecked || qStroika_FeatureSupported_Valgrind
110 nonvirtual
void Reset ();
119 nonvirtual
bool GetIsSet () const noexcept;
134 nonvirtual
bool PeekIsSet () const noexcept;
144 nonvirtual
void Set ();
160 nonvirtual
void Wait (Time::DurationSeconds timeout = Time::kInfinity);
246#if qExecution_WaitableEvent_SupportWaitForMultipleObjects
255 template <
typename CONTAINER_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
256 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAny (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::DurationSeconds timeout = Time::kInfinity);
257 template <
typename ITERATOR_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
258 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAny (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart, ITERATOR_OF_WAITABLE_EVENTS waitableEventsEnd,
269 template <
typename CONTAINER_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
270 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAnyUntil (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::TimePointSeconds timeoutAt);
271 template <
typename ITERATOR_OF_WAITABLE_EVENTS,
typename SET_OF_WAITABLE_EVENTS_RESULT = set<WaitableEvent*>>
272 static SET_OF_WAITABLE_EVENTS_RESULT WaitForAnyUntil (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart,
283 template <
typename CONTAINER_OF_WAITABLE_EVENTS>
284 static void WaitForAll (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::DurationSeconds timeout = Time::kInfinity);
285 template <
typename ITERATOR_OF_WAITABLE_EVENTS>
286 static void WaitForAll (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart, ITERATOR_OF_WAITABLE_EVENTS waitableEventsEnd,
297 template <
typename CONTAINER_OF_WAITABLE_EVENTS>
298 static void WaitForAllUntil (CONTAINER_OF_WAITABLE_EVENTS waitableEvents,
Time::TimePointSeconds timeoutAt);
299 template <
typename ITERATOR_OF_WAITABLE_EVENTS>
300 static void WaitForAllUntil (ITERATOR_OF_WAITABLE_EVENTS waitableEventsStart, ITERATOR_OF_WAITABLE_EVENTS waitableEventsEnd,
304 static inline SpinLock sExtraWaitableEventsMutex_;
308 DISABLE_COMPILER_MSC_WARNING_START (4996);
309 DISABLE_COMPILER_GCC_WARNING_START (
"GCC diagnostic ignored \"-Wdeprecated-declarations\"");
310 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdeprecated-declarations\"");
311 enum class [[deprecated (
"Since Stroika v3.0d4 - use WaitAndReset")]] ResetType {
316 [[deprecated (
"Since Stroika v3.0d4 - use WaitAndReset")]]
static constexpr ResetType eAutoReset = ResetType::eAutoReset;
317 [[deprecated (
"Since Stroika v3.0d4 - use WaitAndReset")]]
static constexpr ResetType eManualReset = ResetType::eManualReset;
318 [[deprecated (
"since v3.0d4 - use WaitStatus::eTimeout")]]
static constexpr WaitStatus kWaitQuietlyTimeoutResult{WaitStatus::eTimeout};
319 [[deprecated (
"since v3.0d4 - use WaitStatus::eTriggered")]]
static constexpr WaitStatus kWaitQuietlySetResult{WaitStatus::eTriggered};
320 DISABLE_COMPILER_MSC_WARNING_END (4996);
321 DISABLE_COMPILER_GCC_WARNING_END (
"GCC diagnostic ignored \"-Wdeprecated-declarations\"");
322 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdeprecated-declarations\"");
326 mutable ConditionVariable<> fConditionVariable{};
327 bool fTriggered{
false};
329 nonvirtual
void Reset ();
330 nonvirtual
bool GetIsSet () const noexcept;
331 nonvirtual
bool PeekIsSet () const noexcept;
332 nonvirtual
void Set ();
333 nonvirtual
void WaitUntil (Time::TimePointSeconds timeoutAt);
334 nonvirtual
WaitStatus WaitUntilQuietly (Time::TimePointSeconds timeoutAt);
337#if qExecution_WaitableEvent_SupportWaitForMultipleObjects
338 forward_list<shared_ptr<WE_>> fExtraWaitableEvents_;