Namespaces
Variants

std::this_thread:: sleep_until

From cppreference.net
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
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
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
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
定義先ヘッダ <thread>
template < class Clock, class Duration >
void sleep_until ( const std:: chrono :: time_point < Clock, Duration > & sleep_time ) ;
(C++11以降)

現在のスレッドの実行を、指定された sleep_time が経過するまでブロックします。

Clock Clock 要件を満たさなければならない。 std:: chrono :: is_clock_v < Clock > false の場合、プログラムは不適格である。 (C++20以降)

標準では、 sleep_time に関連付けられたクロックを使用することが推奨されており、その場合、クロックの調整が考慮される可能性があります。したがって、ブロックの期間は呼び出し時点での sleep_time - Clock :: now ( ) よりも長くなるか短くなる可能性があり、これは調整の方向性と実装がそれを尊重するかどうかに依存します。また、この関数はプロセスのスケジューリングやリソース競合による遅延のため、 sleep_time が過ぎるまでブロックする可能性もあります。

目次

パラメータ

sleep_time - ブロックするまでの時間

戻り値

(なし)

例外

Clock または Duration によってスローされる例外 (標準ライブラリで提供されるクロックとデュレーションは例外をスローしません)。

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

出力例:

Hello, waiter...
Waited 2000.17 ms

関連項目

(C++11)
現在のスレッドの実行を指定された時間だけ停止する
(関数)
Cドキュメント for thrd_sleep