std::this_thread::sleep_until

From cppreference.com
< cpp‎ | thread
 
 
Concurrency support library
Threads
(C++11)
(C++20)
(C++20)
this_thread namespace
(C++11)
(C++11)
(C++11)
sleep_until
(C++11)
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11)(deprecated in C++20)
(C++11)(deprecated in C++20)
Free functions for atomic operations
Free functions for atomic flags
Memory ordering
Mutual exclusion
(C++11)
Generic lock management
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Condition variables
(C++11)
Semaphores
Latches and barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
 
Defined in header <thread>
template< class Clock, class Duration >
void sleep_until( const std::chrono::time_point<Clock,Duration>& sleep_time );
(since C++11)

Blocks the execution of the current thread until specified sleep_time has been reached.

Clock must meet the Clock requirements. The programs is ill-formed if std::chrono::is_clock_v<Clock> is false (since C++20).

The standard recommends that the clock tied to sleep_time be used, in which case adjustments of the clock may be taken into account. Thus, the duration of the block might, but might not, be less or more than sleep_time - Clock::now() at the time of the call, depending on the direction of the adjustment and whether it is honored by the implementation. The function also may block for longer than until after sleep_time has been reached due to scheduling or resource contention delays.

Parameters

sleep_time - time to block until

Return value

(none)

Exceptions

Any exception thrown by Clock or Duration (clocks and durations provided by the standard library never throw)

Example

#include <iostream>
#include <chrono>
#include <thread>
 
auto now() { return std::chrono::steady_clock::now(); }
 
auto awake_time() {
    using std::chrono::operator""ms;
    return now() + 2000ms;
}
 
int main()
{
    std::cout << "Hello, waiter...\n" << std::flush;
    const auto start {now()};
    std::this_thread::sleep_until(awake_time());
    std::chrono::duration<double, std::milli> elapsed {now() - start};
    std::cout << "Waited " << elapsed.count() << " ms\n";
}

Output:

Hello, waiter...
Waited 2000.17 ms

See also

(C++11)
stops the execution of the current thread for a specified time duration
(function)