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

履歴 編集

customization point object
<execution>

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

namespace std::execution {
  struct schedule_t { unspecified };
  inline constexpr schedule_t schedule{};
}

概要

scheduleは、SchedulerからスケジュールSenderを取得するSenderファクトリである。

スケジュールSender

schedule(sch)式の結果はスケジュールSender(schedule sender)と呼ばれる。

スケジュールSenderより生成される非同期操作を開始すると、Schedulerに関連付けられた実行リソース上で空の値完了関数を呼び出す。 スケジュールSenderの値完了Schedulerは、schedule(sch)式の引数に指定したSchedulerschに等しい。

効果

呼び出し式schedule(sch)は式sch.schedule()と等価であり、式の型はsenderを満たすこと。

get_completion_scheduler<set_value_t>(get_env(sch.schedule())) == sch不適格もしくはfalseとなる場合、呼び出し式schedule(sch)動作は未定義となる。

カスタマイゼーションポイント

Schedulerschに対して、式sch.schedule()が呼び出される。

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

int main()
{
  ex::run_loop loop;
  std::jthread worker{[&]{
    std::println("start worker#{}", std::this_thread::get_id());
    loop.run();
  }};

  ex::scheduler auto sch = loop.get_scheduler();
  ex::sender auto sndr =
    ex::schedule(sch)
    | ex::then([]{
      std::println("on worker#{}", std::this_thread::get_id());
      return 42;
    });

  std::println("main#{}", std::this_thread::get_id());

  auto [val] = std::this_thread::sync_wait(std::move(sndr)).value();
  std::println("val={}", val);

  loop.finish();
}

出力例

main#134276695947072
start worker#134276691527232
on worker#134276691527232
val=42

バージョン

言語

  • C++26

処理系

関連項目

参照