200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(UTC):
203
- < span itemprop ="datePublished " content ="2025-05-01T07:59:53 ">
204
- 2025年05月01日 07時59分53秒
203
+ < span itemprop ="datePublished " content ="2025-05-01T14:33:20 ">
204
+ 2025年05月01日 14時33分20秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
233
233
</ p >
234
234
< h2 > 概要</ h2 >
235
235
< p > < code > sync_wait</ code > は、< a href ="../execution/sender.html "> Sender</ a > が完了するまで現在のスレッドをブロックし、非< a class ="cpprefjp-defined-word " data-desc ="マルチスレッド実行時にリソースの所有権に基づいて実行順序を制御する操作 "> 同期操作</ a > の結果を取得するSenderコンシューマである。</ p >
236
- < p > < code > sync_wait</ code > は入力Senderが< a href ="../execution/set_value.html "> 値完了シグネチャ</ a > をただ1種類だけ持つことを要求する。</ p >
236
+ < p > < code > sync_wait</ code > は入力Senderが< a href ="../execution/set_value.html "> 値完了シグネチャ</ a > を1個だけ持つことを要求する。
237
+ 値完了シグネチャが複数存在する場合は< code > < a href ="sync_wait_with_variant.html "> sync_wait_with_variant</ a > </ code > アルゴリズムを利用する。</ p >
238
+ < p > 入力Senderの値完了シグネチャが< code > < a href ="../execution/set_value.html "> set_value_t</ a > (Ts...)</ code > のとき、< code > sync_wait</ code > の結果型は< code > < a href ="../../optional/optional.html "> optional</ a > << a href ="../../tuple/tuple.html "> tuple</ a > <Ts...>></ code > となる。</ p >
237
239
< h2 > 効果</ h2 >
238
240
< p > 説明用の< code > sndr</ code > を< code > decltype((sndr))</ code > が< code > Sndr</ code > 型となる式とする。</ p >
239
241
< p > < code > < a href ="../execution/sender_in.html "> sender_in</ a > <Sndr, < a href ="sync-wait-env.html "> sync-wait-env</ a > > == false</ code > のとき、呼び出し式< code > this_thread::sync_wait(sndr)</ code > は< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
@@ -245,8 +247,8 @@ <h2>効果</h2>
245
247
< li > 型< code > sync-wait-result-type<Sndr></ code > が< a class ="cpprefjp-defined-word " data-desc ="プログラムが文法規則・診断対象の意味規則・単一定義規則を満たすこと " href ="../../../implementation-compliance.html#dfn-well-formed "> 適格</ a > であること。</ li >
246
248
< li > 上記の< code > apply_sender</ code > 式を< code > e</ code > としたとき、< code > < a href ="../../concepts/same_as.html "> same_as</ a > <decltype(e), sync-wait-result-type<Sndr>> == true</ code > であること。</ li >
247
249
</ ul >
248
- < h3 > < a class =" cpprefjp-defined-word " data-desc =" 関数呼び出し式の評価結果となるオブジェクト・値 " > 戻り値 </ a > 型 </ h3 >
249
- < p > < code > sync_wait</ code > の < a class =" cpprefjp-defined-word " data-desc =" 関数呼び出し式の評価結果となるオブジェクト・値 " > 戻り値 </ a > 型となる 、説明専用のエイリアステンプレート< code > sync-wait-result-type</ code > を下記の通り定義する。</ p >
250
+ < h3 > 結果型 </ h3 >
251
+ < p > < code > sync_wait</ code > の結果型となる 、説明専用のエイリアステンプレート< code > sync-wait-result-type</ code > を下記の通り定義する。</ p >
250
252
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> this_thread</ span > < span class ="p "> {</ span >
251
253
< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../execution/sender_in.html "> execution::sender_in</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="sync-wait-env.html "> sync-wait-env</ a > </ span > < span class ="o "> ></ span > < span class ="n "> Sndr</ span > < span class ="o "> ></ span >
252
254
< span class ="k "> using</ span > < span class ="n "> sync</ span > < span class ="o "> -</ span > < span class ="n "> wait</ span > < span class ="o "> -</ span > < span class ="n "> result</ span > < span class ="o "> -</ span > < span class ="n "> type</ span > < span class ="o "> =</ span >
@@ -278,9 +280,9 @@ <h2>カスタマイゼーションポイント</h2>
278
280
< ul >
279
281
< li > 指定したSenderが完了するまで、前方進行保証委任(forward progress guarantee delegation)による現在のスレッドをブロックすること。</ li >
280
282
< li > 指定したSenderの非< a class ="cpprefjp-defined-word " data-desc ="マルチスレッド実行時にリソースの所有権に基づいて実行順序を制御する操作 "> 同期操作</ a > の結果が返る場合< ul >
281
- < li > 値完了の場合 、結果データは< code > < a href ="../../optional/optional.html "> optional</ a > </ code > オブジェクト内の< code > < a href ="../../tuple/tuple.html "> tuple</ a > </ code > で返されること。</ li >
282
- < li > エラー完了の場合 、< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > を送出すること。</ li >
283
- < li > 停止完了の場合、空の < code > < a href ="../../optional/optional.html "> optional</ a > </ code > オブジェクトが返されること。</ li >
283
+ < li > < a href =" ../execution/set_value.html " > 値完了 </ a > の場合 、結果データは< code > < a href ="../../optional/optional.html "> optional</ a > </ code > オブジェクト内の< code > < a href ="../../tuple/tuple.html "> tuple</ a > </ code > で返されること。</ li >
284
+ < li > < a href =" ../execution/set_error.html " > エラー完了 </ a > の場合 、< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > を送出すること。</ li >
285
+ < li > < a href =" ../execution/set_stopped.html " > 停止完了 </ a > の場合、無効値 < code > < a href ="../../optional/optional.html "> optional</ a > </ code > オブジェクトが返されること。</ li >
284
286
</ ul >
285
287
</ li >
286
288
</ ul >
@@ -295,7 +297,7 @@ <h2>例</h2>
295
297
< span class ="n "> < a href ="../execution/sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> sndr</ span > < span class ="o "> =</ span > < span class ="n "> < span href ="https://cpprefjp.github.io/reference/execution/execution/just.md.nolink "> ex::just</ span > </ span > < span class ="p "> (</ span > < span class ="mi "> 100</ span > < span class ="p "> ,</ span > < span class ="sc "> 'X'</ span > < span class ="p "> );</ span >
296
298
< span class ="c1 "> // メインスレッド上で完了待機</ span >
297
299
< span class ="k "> auto</ span > < span class ="n "> result</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> std::this_thread::sync_wait</ span > </ span > < span class ="p "> (</ span > < span class ="n "> sndr</ span > < span class ="p "> );</ span >
298
- < span class ="c1 "> // 戻り値型optional <tuple<int,char>>から値を取り出す</ span >
300
+ < span class ="c1 "> // 結果型optional <tuple<int,char>>から値を取り出す</ span >
299
301
< span class ="k "> auto</ span > < span class ="p "> [</ span > < span class ="n "> n</ span > < span class ="p "> ,</ span > < span class ="n "> c</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> result</ span > < span class ="p "> .</ span > < span class ="n "> < a href ="../../optional/optional/value.html "> value()</ a > </ span > < span class ="p "> ;</ span >
300
302
< span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "result=({}, {})"</ span > < span class ="p "> ,</ span > < span class ="n "> n</ span > < span class ="p "> ,</ span > < span class ="n "> c</ span > < span class ="p "> );</ span >
301
303
< span class ="p "> }</ span >
0 commit comments