最終更新日時(UTC): 2024年11月18日 05時36分09秒
Koichi Murase が更新

履歴 編集

function template
<thread>

# std::this_thread::sleep_until(C++11)

    namespace std {
    namespace this_thread {
      template <class Clock, class Duration>
      void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);
    }}

## 概要

指定した絶対時刻を過ぎるまで現スレッドをブロックする。

## テンプレートパラメータ制約

- `chrono::is_clock_v<Clock>`が`true`であること (C++20)

## 効果

引数 `abs_time`で指定した絶対時間を経過するまで現在のスレッド、すなわちこの関数を呼び出したスレッド自身をブロックする。指定した絶対時間 以上 の時刻になると、現スレッドのブロックが解除されて後続処理の実行が開始される。なお、タイマーの精度は処理系依存。

## 同期操作

特に他操作に対して同期する規定はない。

## 例外

- C++11 : `Clock`がTrivialClock要件を満たしかつ`Duration`上の操作が例外送出しない限りは、この関数は例外送出しない。
- C++14 : 時計クラス、`time_point`クラス、`duration`クラスの構築が例外を送出する場合、この関数はそれらの例外を送出する。

## 例

    #include <thread>
    #include <chrono>

    int main()
    {
      auto abs_time = std::chrono::system_clock::now() + std::chrono::seconds(15);
      //...
      std::this_thread::sleep_until(abs_time);

      return 0;
    }

### 出力

## バージョン

### 言語

- C++11

### 処理系

- Clang:
- GCC: 4.6.3 ✅, 4.7.0 ✅
- ICC:
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅

## 参照

- N2661 A Foundation to Sleep On
- LWG Issue 2093. Throws clause of `condition_variable::wait` with predicate