Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/thread/sleep until"

From cppreference.com
< cpp‎ | thread
m (Text replace - "{{mark c++0x feature}}" to "{{mark c++11 feature}}")
m (fmt, {{c}}, ., headers sorted)
 
(18 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
{{cpp/title|n=this_thread::|sleep_until}}
 
{{cpp/title|n=this_thread::|sleep_until}}
{{cpp/thread/sidebar}}
+
{{cpp/thread/navbar}}
{{ddcl | header=thread | notes={{mark c++11 feature}} | 1=
+
{{ddcl|header=thread|since=c++11|1=
template< typename Clock, typename Duration >
+
template< class Clock, class Duration >
void sleep_until( const std::chrono::time_point<Clock,Duration>& sleep_time );
+
void sleep_until( const std::chrono::time_point<Clock, Duration>& sleep_time );
 
}}
 
}}
  
Blocks the execution of the current thread until specified {{tt|sleep_time}} has been reached. May block for longer than until {{tt|sleep_time}} has been reached.
+
Blocks the execution of the current thread until specified {{c|sleep_time}} has been reached.  
 +
 
 +
{{cpp/thread/block until|sleep_time}}
  
<!-- ======== -->
 
 
===Parameters===
 
===Parameters===
{{param list begin}}
+
{{par begin}}
{{param list item | sleep_time | time to block until}}
+
{{par|sleep_time|time to block until}}
{{param list end}}
+
{{par end}}
  
<!-- ======== -->
 
 
===Return value===
 
===Return value===
{{return none}}
+
(none)
  
<!-- ======== -->
 
 
===Exceptions===
 
===Exceptions===
{{throw none}}
+
Any exception thrown by {{tt|Clock}} or {{tt|Duration}} (clocks and durations provided by the standard library never throw).
 +
 
 +
===Example===
 +
{{example
 +
|code=
 +
#include <chrono>
 +
#include <iostream>
 +
#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";
 +
}
 +
|p=true
 +
|output=
 +
Hello, waiter...
 +
Waited 2000.17 ms
 +
}}
  
<!-- ======== -->
 
 
===See also===
 
===See also===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list template | cpp/thread/dcl list sleep_for}}
+
{{dsc inc|cpp/thread/dsc sleep_for}}
{{dcl list end}}
+
{{dsc see c|c/thread/thrd_sleep}}
 +
{{dsc end}}
 +
 
 +
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}

Latest revision as of 10:30, 23 October 2023

 
 
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
(C++11)
sleep_until
(C++11)
Cooperative cancellation
Mutual exclusion
(C++11)
Generic lock management
(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)
Safe Reclamation
(C++26)
Hazard Pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11)(deprecated in C++20)
(C++11)(deprecated in C++20)
Memory ordering
Free functions for atomic operations
Free functions for atomic flags
 
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 program 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 be more or less 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 until after sleep_time has been reached due to process scheduling or resource contention delays.

Contents

[edit] Parameters

sleep_time - time to block until

[edit] Return value

(none)

[edit] Exceptions

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

[edit] Example

#include <chrono>
#include <iostream>
#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";
}

Possible output:

Hello, waiter...
Waited 2000.17 ms

[edit] See also

(C++11)
stops the execution of the current thread for a specified time duration
(function) [edit]
C documentation for thrd_sleep