std::this_thread::sleep_until
From cppreference.com
| ヘッダ <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 ドキュメント (thrd_sleep)
| |