namespace std::execition {
class run_loop;
}
概要
run_loop
は、実行制御ライブラリの作業をスケジュール可能な実行リソース(execution resource)である。
内部的にスレッドセーフなFIFO (first-in first-out) 作業キューを保持する。
run
メンバ関数はキューから作業を順次取り出し、同関数を呼び出すスレッド上で逐次実行する。
run_loop
インスタンスの動作説明のため、下記の説明用メンバ変数を持つ。
count
: キュー上に保持している作業の個数state
: 開始(starting)/実行中(running)/終了中(finishing)/終了済み(finished) いずれかの状態
メンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
(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
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??