最終更新日時(UTC):
が更新

履歴 編集

function
<stop_token>

std::stop_token::stop_possible(C++20)

[[nodiscard]] bool stop_possible() const noexcept;

概要

停止要求が作成されうるかどうかを返す。

戻り値

以下の場合はfalseを返す。

  • 自身が停止状態を所有していない場合。
  • 所有している停止状態が停止要求が受け取っておらず、かつその停止状態に紐づくstop_sourceオブジェクトが存在しない場合。

それ以外の場合はtrueを返す。

例外

投げない。

備考

一度stop_requested() == trueとなったstop_tokenは、自身と停止状態を共有するstop_sourceが破棄されてもstop_requested() == trueかつstop_possible() == trueの状態のままになる。

#include <cassert>
#include <stop_token>

int main()
{
  std::stop_source ss1;
  std::stop_source ss2;

  std::stop_token st1 = ss1.get_token();
  std::stop_token st2 = ss2.get_token();
  std::stop_token st3;

  assert(st1.stop_possible() == true);
  assert(st2.stop_possible() == true);
  assert(st3.stop_possible() == false);

  // 停止要求を作成する
  ss1.request_stop();

  assert(st1.stop_possible() == true);
  assert(st2.stop_possible() == true);
  assert(st3.stop_possible() == false);

  // stop_token に紐づく stop_source を破棄する
  ss1 = std::stop_source{};
  ss2 = std::stop_source{};

  // 停止状態が停止要求を受け取った場合は、
  // その後で stop_source が破棄されても stop_possible() == true のままになる
  assert(st1.stop_possible() == true);
  assert(st2.stop_possible() == false);
  assert(st3.stop_possible() == false);
}

出力

バージョン

言語

  • C++20

処理系