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

履歴 編集

class
<execution>

std::execution::run_loop(C++26)

namespace std::execition {
  class run_loop;
}

概要

run_loopは、実行制御ライブラリの作業をスケジュール可能な実行リソース(execution resource)である。

内部的にスレッドセーフなFIFO (first-in first-out) 作業キューを保持する。 runメンバ関数はキューから作業を順次取り出し、同関数を呼び出すスレッド上で逐次実行する。

run_loopインスタンスの動作説明のため、下記の説明用メンバ変数を持つ。

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++26
(destructor) デストラクタ C++26
get_scheduler Scheduler取得 C++26
run キュー上の作業を逐次実行 C++26
finish 状態を終了中に変更 C++26

メンバ型

名前 説明 対応バージョン
run-loop-scheduler 動作説明用のScheduler型 C++26
run-loop-sender 動作説明用のSender型 C++26
run-loop-opstate-base 動作説明用の基底クラス C++26
run-loop-opstate 動作説明用のクラステンプレート C++26

#include <print>
#include <execution>
namespace ex = std::execution;

struct MyReceiver {
  using receiver_concept = ex::receiver_t;

  void set_value() noexcept
    { std::println("success"); }
  void set_error(std::exception_ptr) noexcept
    { std::println("failure"); }
  void set_stopped() noexcept
    { std::println("cancellation"); }
};


int main()
{
  ex::run_loop loop;
  // count=0, state=開始(starting)

  // run_loopのスケジュールSenderとReceiverを接続
  ex::scheduler auto sch = loop.get_scheduler();
  ex::sender auto sndr = ex::schedule(sch);
  ex::receiver auto rcvr = MyReceiver{};
  auto op = ex::connect(sndr, rcvr);

  // run_loopキューに作業を1つ追加
  ex::start(op);
  // count=1, state=開始(starting)

  // run_loop状態を終了中(finishing)へ変更
  loop.finish();
  // count=1, state=終了中(finishing)

  // run_loopキュー上の作業を逐次実行
  loop.run();
  // count=0, state=終了済み(finished)
}

出力

success

バージョン

言語

  • C++26

処理系

関連項目

参照