6868
6969 </ head >
7070 < body >
71- < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "id-type": ["class"], "namespace": ["std::execution"], "cpp": ["cpp26"]}, "sources": [{"id": "7670866e83f1b970a7e6003cc30ae2d913b87f76", "source": "#include <execution>\nnamespace ex = std::execution;\n\nstruct MyReceiver {\n using receiver_concept = ex::receiver_t;\n\n void set_value() noexcept\n { std::println(\"value\"); }\n void set_error(std::exception_ptr) noexcept\n { std::println(\"error\"); }\n void set_stopped() noexcept\n { std::println(\"stopped\"); }\n};\n\n\nint main()\n{\n // run_loop\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30ebSender\u3092\u53d6\u5f97\n ex::run_loop loop;\n ex::scheduler auto sch = loop.get_scheduler();\n // state:\u958b\u59cb(starting)\n\n ex::sender auto sndr = ex::schedule(sch);\n ex::receiver auto rcvr = MyReceiver{};\n ex::operation_state auto op = ex::connect(sndr, rcvr);\n // \u30ad\u30e5\u30fc\u306b\u4f5c\u696d\u30921\u3064\u8ffd\u52a0\n ex::start(op);\n\n // state\u3092\u5b8c\u4e86\u4e2d(finished)\u3078\u9077\u79fb\n loop.finish();\n\n // \u30ad\u30e5\u30fc\u4e0a\u306e\u4f5c\u696d\u3092\u5168\u3066\u51e6\u7406\n loop.run();\n // state:\u5b8c\u4e86\u6e08\u307f(finished)\n}\n"}], "page_id": ["reference", "execution", "execution", "run_loop"]} ">
71+ < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "id-type": ["class"], "namespace": ["std::execution"], "cpp": ["cpp26"]}, "sources": [{"id": "b4143e51092cd5564b781db73454ee3c5ba13363", "source": "#include <print>\n#include <execution>\nnamespace ex = std::execution;\n\nstruct MyReceiver {\n using receiver_concept = ex::receiver_t;\n\n void set_value() noexcept\n { std::println(\"success\"); }\n void set_error(std::exception_ptr) noexcept\n { std::println(\"failure\"); }\n void set_stopped() noexcept\n { std::println(\"cancellation\"); }\n};\n\n\nint main()\n{\n ex::run_loop loop;\n // count=0, state=\u958b\u59cb(starting)\n\n // run_loop\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30ebSender\u3068Receiver\u3092\u63a5\u7d9a\n ex::scheduler auto sch = loop.get_scheduler();\n ex::sender auto sndr = ex::schedule(sch);\n ex::receiver auto rcvr = MyReceiver{};\n auto op = ex::connect(sndr, rcvr);\n\n // run_loop\u30ad\u30e5\u30fc\u306b\u4f5c\u696d\u30921\u3064\u8ffd\u52a0\n ex::start(op);\n // count=1, state=\u958b\u59cb(starting)\n\n // run_loop\u72b6\u614b\u3092\u7d42\u4e86\u4e2d(finished)\u3078\u5909\u66f4\n loop.finish();\n // count=1, state=\u7d42\u4e86\u4e2d(finished)\n\n // run_loop\u30ad\u30e5\u30fc\u4e0a\u306e\u4f5c\u696d\u3092\u9010\u6b21\u5b9f\u884c\n loop.run();\n // count=0, state=\u7d42\u4e86\u6e08\u307f(finished)\n}\n"}], "page_id": ["reference", "execution", "execution", "run_loop"]} ">
7272 < nav class ="navbar navbar-default " role ="navigation ">
7373 < div class ="container-fluid ">
7474 < div class ="navbar-header ">
200200
201201 < p class ="text-right "> < small >
202202 最終更新日時(UTC):
203- < span itemprop ="datePublished " content ="2025-04-29T16:23:37 ">
204- 2025年04月29日 16時23分37秒
203+ < span itemprop ="datePublished " content ="2025-04-30T05:29:54 ">
204+ 2025年04月30日 05時29分54秒
205205 </ span >
206206 < br />
207207 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
233233< h2 > 概要</ h2 >
234234< p > < code > run_loop</ code > は、実行制御ライブラリの作業を< a href ="schedule.html "> スケジュール</ a > 可能な実行リソース(execution resource)である。</ p >
235235< p > 内部的にスレッドセーフなFIFO (first-in first-out) 作業キューを保持する。
236- < span href ="https://cpprefjp.github.io/reference/execution/execution/ run_loop/run.md.nolink "> < code > run</ code > メンバ関数</ span > はキューから作業を取り出し、同関数を呼び出したスレッド上のループで実行する。</ p >
236+ < a href ="run_loop/run.html "> < code > run</ code > メンバ関数</ a > はキューから作業を取り出し、同関数を呼び出したスレッド上のループで実行する。</ p >
237237< p > < code > run_loop</ code > インスタンスの動作説明のため、下記の説明用メンバ変数を持つ。</ p >
238238< ul >
239- < li > < code > count</ code > : FIFOキューが保持する作業の個数 </ li >
240- < li > < code > state</ code > : 開始(starting)/ 実行中(running)/完了中 (finishing)/完了済み (finished) いずれかのインスタンス状態 </ li >
239+ < li > < code > count</ code > : キュー上に保持している作業の個数 </ li >
240+ < li > < code > state</ code > : < a href =" run_loop/op_constructor.html " > 開始(starting)</ a > / < a href =" run_loop/run.html " > 実行中(running)</ a > / < a href =" run_loop/finish.html " > 終了中 (finishing)</ a > / < a href =" run_loop/run.html " > 終了済み (finished)</ a > いずれかの状態 </ li >
241241</ ul >
242242< h2 > メンバ関数</ h2 >
243243< table border ="1 " bordercolor ="#888 " style ="border-collapse:collapse ">
@@ -265,13 +265,13 @@ <h2>メンバ関数</h2>
265265< td > C++26</ td >
266266</ tr >
267267< tr >
268- < td > < code > < span href ="https://cpprefjp.github.io/reference/execution/execution/ run_loop/run.md.nolink "> run</ span > </ code > </ td >
269- < td > ループ実行を開始 </ td >
268+ < td > < code > < a href ="run_loop/run.html "> run</ a > </ code > </ td >
269+ < td > キュー上の作業を逐次実行 </ td >
270270< td > C++26</ td >
271271</ tr >
272272< tr >
273- < td > < code > < span href ="https://cpprefjp.github.io/reference/execution/execution/ run_loop/finish.md.nolink "> finish</ span > </ code > </ td >
274- < td > ループ実行を終了 </ td >
273+ < td > < code > < a href ="run_loop/finish.html "> finish</ a > </ code > </ td >
274+ < td > 状態を終了中に変更 </ td >
275275< td > C++26</ td >
276276</ tr >
277277</ tbody >
@@ -288,61 +288,70 @@ <h2>説明専用のメンバ型</h2>
288288< tbody >
289289< tr >
290290< td > < code > < a href ="run_loop/run-loop-scheduler.html "> run-loop-scheduler</ a > </ code > </ td >
291- < td > 説明専用クラス </ td >
291+ < td > 動作説明用の < a href =" scheduler.html " > Scheduler型 </ a > </ td >
292292< td > C++26</ td >
293293</ tr >
294294< tr >
295295< td > < code > < a href ="run_loop/run-loop-sender.html "> run-loop-sender</ a > </ code > </ td >
296- < td > 説明専用クラス </ td >
296+ < td > 動作説明用の < a href =" sender.html " > Sender型 </ a > </ td >
297297< td > C++26</ td >
298298</ tr >
299299< tr >
300- < td > < code > < span href ="https://cpprefjp.github.io/reference/execution/execution/run_loop/run-loop-opstate.md.nolink "> run-loop-opstate</ span > </ code > </ td >
301- < td > 説明専用クラス</ td >
300+ < td > < code > < a href ="run_loop/run-loop-opstate.html "> run-loop-opstate-base</ a > </ code > </ td >
301+ < td > 動作説明用の基底クラス</ td >
302+ < td > C++26</ td >
303+ </ tr >
304+ < tr >
305+ < td > < code > < a href ="run_loop/run-loop-opstate.html "> run-loop-opstate</ a > </ code > </ td >
306+ < td > 動作説明用のクラステンプレート</ td >
302307< td > C++26</ td >
303308</ tr >
304309</ tbody >
305310</ table >
306311< h2 > 例</ h2 >
307- < p > < div class ="yata " id ="7670866e83f1b970a7e6003cc30ae2d913b87f76 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../execution.html "> <execution></ a > </ span > < span class ="cp "> </ span >
312+ < p > < div class ="yata " id ="b4143e51092cd5564b781db73454ee3c5ba13363 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../print.html "> <print></ a > </ span > < span class ="cp "> </ span >
313+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../execution.html "> <execution></ a > </ span > < span class ="cp "> </ span >
308314< span class ="k "> namespace</ span > < span class ="n "> ex</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> execution</ span > < span class ="p "> ;</ span >
309315
310316< span class ="k "> struct</ span > < span class ="n "> MyReceiver</ span > < span class ="p "> {</ span >
311317 < span class ="k "> using</ span > < span class ="n "> receiver_concept</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="receiver.html "> ex::receiver_t</ a > </ span > < span class ="p "> ;</ span >
312318
313319 < span class ="kt "> void</ span > < span class ="nf "> set_value</ span > < span class ="p "> ()</ span > < span class ="k "> noexcept</ span >
314- < span class ="p "> {</ span > < span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "value "</ span > < span class ="p "> );</ span > < span class ="p "> }</ span >
320+ < span class ="p "> {</ span > < span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "success "</ span > < span class ="p "> );</ span > < span class ="p "> }</ span >
315321 < span class ="kt "> void</ span > < span class ="nf "> set_error</ span > < span class ="p "> (</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> exception_ptr</ span > < span class ="p "> )</ span > < span class ="k "> noexcept</ span >
316- < span class ="p "> {</ span > < span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "error "</ span > < span class ="p "> );</ span > < span class ="p "> }</ span >
322+ < span class ="p "> {</ span > < span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "failure "</ span > < span class ="p "> );</ span > < span class ="p "> }</ span >
317323 < span class ="kt "> void</ span > < span class ="nf "> set_stopped</ span > < span class ="p "> ()</ span > < span class ="k "> noexcept</ span >
318- < span class ="p "> {</ span > < span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "stopped "</ span > < span class ="p "> );</ span > < span class ="p "> }</ span >
324+ < span class ="p "> {</ span > < span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "cancellation "</ span > < span class ="p "> );</ span > < span class ="p "> }</ span >
319325< span class ="p "> };</ span >
320326
321327
322328< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
323329< span class ="p "> {</ span >
324- < span class ="c1 "> // run_loopのスケジュールSenderを取得</ span >
325330 < span class ="n "> < span style ="color:#ff0000 "> ex::run_loop</ span > </ span > < span class ="n "> loop</ span > < span class ="p "> ;</ span >
326- < span class ="n "> < a href ="scheduler.html "> ex::scheduler</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> sch</ span > < span class ="o "> =</ span > < span class ="n "> loop</ span > < span class ="p "> .</ span > < span class ="n "> < a href ="run_loop/get_scheduler.html "> get_scheduler()</ a > </ span > < span class ="p "> ;</ span >
327- < span class ="c1 "> // state:開始(starting)</ span >
331+ < span class ="c1 "> // count=0, state=開始(starting)</ span >
328332
333+ < span class ="c1 "> // run_loopのスケジュールSenderとReceiverを接続</ span >
334+ < span class ="n "> < a href ="scheduler.html "> ex::scheduler</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> sch</ span > < span class ="o "> =</ span > < span class ="n "> loop</ span > < span class ="p "> .</ span > < span class ="n "> < a href ="run_loop/get_scheduler.html "> get_scheduler()</ a > </ span > < span class ="p "> ;</ span >
329335 < span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> sndr</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="schedule.html "> ex::schedule</ a > </ span > < span class ="p "> (</ span > < span class ="n "> sch</ span > < span class ="p "> );</ span >
330336 < span class ="n "> < a href ="receiver.html "> ex::receiver</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> rcvr</ span > < span class ="o "> =</ span > < span class ="n "> MyReceiver</ span > < span class ="p "> {};</ span >
331- < span class ="n "> < a href ="operation_state.html "> ex::operation_state</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> op</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="connect.html "> ex::connect</ a > </ span > < span class ="p "> (</ span > < span class ="n "> sndr</ span > < span class ="p "> ,</ span > < span class ="n "> rcvr</ span > < span class ="p "> );</ span >
332- < span class ="c1 "> // キューに作業を1つ追加</ span >
337+ < span class ="k "> auto</ span > < span class ="n "> op</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="connect.html "> ex::connect</ a > </ span > < span class ="p "> (</ span > < span class ="n "> sndr</ span > < span class ="p "> ,</ span > < span class ="n "> rcvr</ span > < span class ="p "> );</ span >
338+
339+ < span class ="c1 "> // run_loopキューに作業を1つ追加</ span >
333340 < span class ="n "> < a href ="start.html "> ex::start</ a > </ span > < span class ="p "> (</ span > < span class ="n "> op</ span > < span class ="p "> );</ span >
341+ < span class ="c1 "> // count=1, state=開始(starting)</ span >
334342
335- < span class ="c1 "> // stateを完了中(finished)へ遷移</ span >
336- < span class ="n "> loop</ span > < span class ="p "> .</ span > < span class ="n "> < span href ="https://cpprefjp.github.io/reference/execution/execution/run_loop/finish.md.nolink "> finish()</ span > </ span > < span class ="p "> ;</ span >
343+ < span class ="c1 "> // run_loop状態を終了中(finished)へ変更</ span >
344+ < span class ="n "> loop</ span > < span class ="p "> .</ span > < span class ="n "> < a href ="run_loop/finish.html "> finish()</ a > </ span > < span class ="p "> ;</ span >
345+ < span class ="c1 "> // count=1, state=終了中(finished)</ span >
337346
338- < span class ="c1 "> // キュー上の作業を全て処理 </ span >
339- < span class ="n "> loop</ span > < span class ="p "> .</ span > < span class ="n "> < span href ="https://cpprefjp.github.io/reference/execution/execution/ run_loop/run.md.nolink "> run()</ span > </ span > < span class ="p "> ;</ span >
340- < span class ="c1 "> // state:完了済み (finished)</ span >
347+ < span class ="c1 "> // run_loopキュー上の作業を逐次実行 </ span >
348+ < span class ="n "> loop</ span > < span class ="p "> .</ span > < span class ="n "> < a href ="run_loop/run.html "> run()</ a > </ span > < span class ="p "> ;</ span >
349+ < span class ="c1 "> // count=0, state=終了済み (finished)</ span >
341350< span class ="p "> }</ span >
342351</ code > </ pre > </ div >
343352</ div > </ p >
344353< h3 > 出力</ h3 >
345- < p > < pre > < code > value
354+ < p > < pre > < code > success
346355</ code > </ pre > </ p >
347356< h2 > バージョン</ h2 >
348357< h3 > 言語</ h3 >
@@ -358,7 +367,7 @@ <h3>処理系</h3>
358367</ ul >
359368< h2 > 関連項目</ h2 >
360369< ul >
361- < li > < code > < a href ="schedule .html "> execution::schedule </ a > </ code > </ li >
370+ < li > < code > < a href ="scheduler .html "> execution::scheduler </ a > </ code > </ li >
362371</ ul >
363372< h2 > 参照</ h2 >
364373< ul >
0 commit comments