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>
105 template <
typename MUTEX = mutex,
typename CONDITION_VARIABLE = condition_variable_any>
139#if not defined(__cpp_lib_jthread)
140 static constexpr bool kSupportsStopToken =
false;
142 static constexpr bool kSupportsStopToken = same_as<CONDITION_VARIABLE, condition_variable_any>;
240 template <invocable PREDICATE>
241 nonvirtual
bool wait_until (
LockType& lock, Time::TimePointSeconds timeoutAt, PREDICATE&& readyToWake);
265 nonvirtual cv_status
wait_for (
LockType& lock, Time::DurationSeconds timeout);
266 template <invocable PREDICATE>
267 nonvirtual
bool wait_for (
LockType& lock, Time::DurationSeconds timeout, PREDICATE&& readyToWake);
280 template <invocable FUNCTION>
294 template <invocable FUNCTION>
305#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