68
68
69
69
</ head >
70
70
< 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"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(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秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
233
233
< h2 > 概要</ h2 >
234
234
< p > < code > run_loop</ code > は、実行制御ライブラリの作業を< a href ="schedule.html "> スケジュール</ a > 可能な実行リソース(execution resource)である。</ p >
235
235
< 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 >
237
237
< p > < code > run_loop</ code > インスタンスの動作説明のため、下記の説明用メンバ変数を持つ。</ p >
238
238
< 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 >
241
241
</ ul >
242
242
< h2 > メンバ関数</ h2 >
243
243
< table border ="1 " bordercolor ="#888 " style ="border-collapse:collapse ">
@@ -265,13 +265,13 @@ <h2>メンバ関数</h2>
265
265
< td > C++26</ td >
266
266
</ tr >
267
267
< 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 >
270
270
< td > C++26</ td >
271
271
</ tr >
272
272
< 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 >
275
275
< td > C++26</ td >
276
276
</ tr >
277
277
</ tbody >
@@ -288,61 +288,70 @@ <h2>説明専用のメンバ型</h2>
288
288
< tbody >
289
289
< tr >
290
290
< 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 >
292
292
< td > C++26</ td >
293
293
</ tr >
294
294
< tr >
295
295
< 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 >
297
297
< td > C++26</ td >
298
298
</ tr >
299
299
< 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 >
302
307
< td > C++26</ td >
303
308
</ tr >
304
309
</ tbody >
305
310
</ table >
306
311
< 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 >
308
314
< 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 >
309
315
310
316
< span class ="k "> struct</ span > < span class ="n "> MyReceiver</ span > < span class ="p "> {</ span >
311
317
< 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 >
312
318
313
319
< 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 >
315
321
< 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 >
317
323
< 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 >
319
325
< span class ="p "> };</ span >
320
326
321
327
322
328
< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
323
329
< span class ="p "> {</ span >
324
- < span class ="c1 "> // run_loopのスケジュールSenderを取得</ span >
325
330
< 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 >
328
332
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 >
329
335
< 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 >
330
336
< 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 >
333
340
< 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 >
334
342
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 >
337
346
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 >
341
350
< span class ="p "> }</ span >
342
351
</ code > </ pre > </ div >
343
352
</ div > </ p >
344
353
< h3 > 出力</ h3 >
345
- < p > < pre > < code > value
354
+ < p > < pre > < code > success
346
355
</ code > </ pre > </ p >
347
356
< h2 > バージョン</ h2 >
348
357
< h3 > 言語</ h3 >
@@ -358,7 +367,7 @@ <h3>処理系</h3>
358
367
</ ul >
359
368
< h2 > 関連項目</ h2 >
360
369
< 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 >
362
371
</ ul >
363
372
< h2 > 参照</ h2 >
364
373
< ul >
0 commit comments