4#ifndef _Stroika_Foundation_Execution_ConditionVariable_h_
5#define _Stroika_Foundation_Execution_ConditionVariable_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#include <condition_variable>
113 template <
typename MUTEX = mutex,
typename CONDITION_VARIABLE = condition_variable_any>
147#if __cpp_lib_jthread < 201911
148 static constexpr bool kSupportsStopToken =
false;
150 static constexpr bool kSupportsStopToken = same_as<CONDITION_VARIABLE, condition_variable_any>;
248 template <invocable PREDICATE>
249 nonvirtual
bool wait_until (
LockType& lock, Time::TimePointSeconds timeoutAt, PREDICATE&& readyToWake);
273 nonvirtual cv_status
wait_for (
LockType& lock, Time::DurationSeconds timeout);
274 template <invocable PREDICATE>
275 nonvirtual
bool wait_for (
LockType& lock, Time::DurationSeconds timeout, PREDICATE&& readyToWake);
288 template <invocable FUNCTION>
302 template <invocable FUNCTION>
313#include "ConditionVariable.inl"
chrono::duration< double > DurationSeconds
chrono::duration<double> - a time span (length of time) measured in seconds, but high precision.
nonvirtual void notify_all() noexcept
forward notify_all () call to underlying std::condition_variable'
nonvirtual void release_and_notify_one(LockType &lock) noexcept
nonvirtual cv_status wait_until(LockType &lock, Time::TimePointSeconds timeoutAt)
nonvirtual void MutateDataNotifyAll(FUNCTION &&mutatorFunction)
nonvirtual cv_status wait_for(LockType &lock, Time::DurationSeconds timeout)
static Time::DurationSeconds sConditionVariableWaitChunkTime
CONDITION_VARIABLE fConditionVariable
unique_lock< MUTEX > LockType
CONDITION_VARIABLE ConditionVariableType
nonvirtual void notify_one() noexcept
forward notify_one () call to underlying std::condition_variable'
nonvirtual void release_and_notify_all(LockType &lock) noexcept
nonvirtual void MutateDataNotifyOne(FUNCTION &&mutatorFunction)
lock_guard< MUTEX > QuickLockType