最終更新日時: 2025年04月07日 17時11分27秒 (JST)
yoh が更新

履歴 編集

class
<stop_token>

# std::stop_token(C++20)

    namespace std {
      class stop_token;
    }

## 概要

`stop_token`クラスは、停止要求が作成されたかどうか、あるいは停止要求が作成されうるかどうかなど、停止状態を問い合わせるためのインターフェースを提供する。

`stop_token`は`stoppable_token`のモデルである。

`stop_source`クラスの`get_token()`メンバ関数を呼び出すと、その`stop_source`クラスのオブジェクトと停止状態を共有する`stop_token`クラスのオブジェクトを構築できる。これによって、`stop_source`側から停止要求を作成したときに、この`stop_token`を通じて停止状態を問い合わせられるようになる。

また、`stop_token`クラスは以下のクラスでも利用される：

- `stop_callback`
  - 停止要求に応じて呼び出されるコールバックを登録する際に、コンストラクタで`stop_token`を受け取る。
- `condition_variable_any`
  - 割り込み可能な待機処理を行う際に、`wait()`メンバ関数で`stop_token`を受け取る。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++20
`(destructor)` | デストラクタ | C++20
`operator=` | 代入演算子 | C++20
`swap` | 別の`stop_token`と交換する | C++20
`stop_requested` | 停止要求が作成されたかどうかを取得する | C++20
`stop_possible` | 停止要求が作成されうるかどうかを取得する | C++20

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`callback_type` | 対応するコールバック型 | C++26

## 非メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値演算子 | C++20
`operator!=` | 非等値演算子 | C++20
`swap` | 2つの`stop_token`オブジェクトを入れ替える | C++20

## 例

    #include <cassert>
    #include <stop_token>

    int main()
    {
      std::stop_source ss;
      std::stop_token st = ss.get_token();
      assert(st.stop_requested() == false);

      ss.request_stop();

      assert(st.stop_requested() == true);
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `stop_source`
- `stop_callback`

## 参照

- P0660R10 Stop token and joining thread
- P2300R10 `std::execution`