[thread.condvarany.intwait] (original) (raw)
32 Concurrency support library [thread]
32.7 Condition variables [thread.condition]
32.7.5 Class condition_variable_any [thread.condition.condvarany]
32.7.5.3 Interruptible waits [thread.condvarany.intwait]
The following wait functions will be notified when there is a stop request on the passed stop_token.
In that case the functions return immediately, returning false if the predicate evaluates to false.
template<class Lock, class Predicate> bool wait(Lock& lock, stop_token stoken, Predicate pred);
Effects: Registers for the duration of this call *thisto get notified on a stop request on stokenduring this call and then equivalent to:while (!stoken.stop_requested()) { if (pred()) return true; wait(lock);} return pred();
[Note 1:
The returned value indicates whether the predicate evaluated totrue regardless of whether there was a stop request.
— _end note_]
Postconditions: lock is locked by the calling thread.
Throws: Any exception thrown by pred.
Remarks: If the function fails to meet the postcondition,terminate is called ([except.terminate]).
[Note 2:
This can happen if the re-locking of the mutex throws an exception.
— _end note_]
template<class Lock, class Clock, class Duration, class Predicate> bool wait_until(Lock& lock, stop_token stoken,const chrono::time_point<Clock, Duration>& abs_time, Predicate pred);
Effects: Registers for the duration of this call *thisto get notified on a stop request on stokenduring this call and then equivalent to:while (!stoken.stop_requested()) { if (pred()) return true;if (wait_until(lock, abs_time) == cv_status::timeout) return pred();} return pred();
[Note 3:
There is no blocking if pred() is initially true,stoken.stop_requested() was already trueor the timeout has already expired.
— _end note_]
[Note 4:
The returned value indicates whether the predicate evaluated to trueregardless of whether the timeout was triggered or a stop request was made.
— _end note_]
Postconditions: lock is locked by the calling thread.
Remarks: If the function fails to meet the postcondition,terminate is called ([except.terminate]).
[Note 5:
This can happen if the re-locking of the mutex throws an exception.
— _end note_]
template<class Lock, class Rep, class Period, class Predicate> bool wait_for(Lock& lock, stop_token stoken,const chrono::duration<Rep, Period>& rel_time, Predicate pred);
Effects: Equivalent to:return wait_until(lock, std::move(stoken), chrono::steady_clock::now() + rel_time, std::move(pred));