|
68 | 68 |
|
69 | 69 | </head>
|
70 | 70 | <body>
|
71 |
| -<header data-kunai-mdinfo="{"meta": {"header": ["future"], "namespace": ["std"], "class": ["future"], "id-type": ["function template"], "cpp": ["cpp11"]}, "sources": [{"id": "ca76fe51671a15677ad5a83f5d34211cc477aa73", "source": "#include <iostream>\n#include <future>\n#include <thread>\n#include <utility>\n\nvoid calc(std::promise<int> p)\n{\n p.set_value(3); // \u7d50\u679c\u3092\u66f8\u304d\u8fbc\u3080\n}\n\nint main()\n{\n std::promise<int> p;\n std::future<int> f = p.get_future();\n\n std::thread t(calc, std::move(p));\n\n // \u7d50\u679c\u304c\u66f8\u304d\u8fbc\u307e\u308c\u308b\u307e\u3067\u5f85\u6a5f\u3059\u308b\n // 3\u79d2\u3067\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\n std::future_status result = f.wait_for(std::chrono::seconds(3));\n if (result != std::future_status::timeout) {\n // \u7d50\u679c\u3092\u53d6\u308a\u51fa\u3059(\u6e96\u5099\u5b8c\u4e86\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u3059\u3050\u306b\u5024\u3092\u53d6\u308a\u51fa\u305b\u308b)\n std::cout << f.get() << std::endl;\n }\n else {\n std::cout << \"timeout\" << std::endl;\n }\n\n t.join();\n}\n"}], "page_id": ["reference", "future", "future", "wait_for"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["future"], "namespace": ["std"], "class": ["future"], "id-type": ["function template"], "cpp": ["cpp11"]}, "sources": [{"id": "ca76fe51671a15677ad5a83f5d34211cc477aa73", "source": "#include <iostream>\n#include <future>\n#include <thread>\n#include <utility>\n\nvoid calc(std::promise<int> p)\n{\n p.set_value(3); // \u7d50\u679c\u3092\u66f8\u304d\u8fbc\u3080\n}\n\nint main()\n{\n std::promise<int> p;\n std::future<int> f = p.get_future();\n\n std::thread t(calc, std::move(p));\n\n // \u7d50\u679c\u304c\u66f8\u304d\u8fbc\u307e\u308c\u308b\u307e\u3067\u5f85\u6a5f\u3059\u308b\n // 3\u79d2\u3067\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\n std::future_status result = f.wait_for(std::chrono::seconds(3));\n if (result != std::future_status::timeout) {\n // \u7d50\u679c\u3092\u53d6\u308a\u51fa\u3059(\u6e96\u5099\u5b8c\u4e86\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u3059\u3050\u306b\u5024\u3092\u53d6\u308a\u51fa\u305b\u308b)\n std::cout << f.get() << std::endl;\n }\n else {\n std::cout << \"timeout\" << std::endl;\n }\n\n t.join();\n}\n"}, {"id": "dc081e75f5d556dbdd5ef6c3a8e10148c060ba3b", "source": "#include <iostream>\n#include <future>\n#include <chrono>\n\nint main()\n{\n std::promise<int> p;\n std::future<int> f = p.get_future();\n const auto ready = [&f] {\n return f.wait_for(std::chrono::seconds{0}) == std::future_status::ready;\n };\n\n // \u307e\u3060\u5024\u306f\u30bb\u30c3\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\n std::cout << std::boolalpha << ready() << std::endl;\n\n p.set_value(1);\n\n // \u5024\u304c\u30bb\u30c3\u30c8\u3055\u308c\u305f\n std::cout << std::boolalpha << ready() << std::endl;\n\n f.get(); // \u4e00\u5ea6\u5024\u3092\u53d6\u308a\u51fa\u3059\u3068\u5171\u6709\u72b6\u614b\u304c\u7834\u68c4\u3055\u308c\u308b\n\n // \u5171\u6709\u72b6\u614b\u3092\u6301\u305f\u306a\u3044(valid() == false\u306a)future\u3067wait\u3092\u3059\u308b\u3068std::future_error\u4f8b\u5916\n try {\n ready();\n }\n catch(const std::future_error& e) {\n std::cout << e.what() << std::endl;\n }\n}\n"}], "page_id": ["reference", "future", "future", "wait_for"]}"> |
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="2024-06-11T13:45:38"> |
204 |
| - 2024年06月11日 13時45分38秒 |
| 203 | + <span itemprop="datePublished" content="2025-01-04T00:11:44"> |
| 204 | + 2025年01月04日 00時11分44秒 |
205 | 205 | </span>
|
206 | 206 | <br/>
|
207 | 207 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
208 |
| - <span itemprop="name">Akira Takahashi</span> |
| 208 | + <span itemprop="name">I</span> |
209 | 209 | </span>
|
210 | 210 | が更新
|
211 | 211 | </small></p>
|
@@ -244,6 +244,7 @@ <h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに
|
244 | 244 | <li>C++14 : 時計クラス、<code><a href="../../chrono/time_point.html">time_point</a></code>クラス、<code><a href="../../chrono/duration.html">duration</a></code>クラスの構築が<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>を送出する場合、この関数はそれらの<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>を送出する。</li>
|
245 | 245 | </ul>
|
246 | 246 | <h2>例</h2>
|
| 247 | +<h3>例1</h3> |
247 | 248 | <p><div class="yata" id="ca76fe51671a15677ad5a83f5d34211cc477aa73"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../iostream.html"><iostream></a></span><span class="cp"></span>
|
248 | 249 | <span class="cp">#include</span> <span class="cpf"><a href="../../future.html"><future></a></span><span class="cp"></span>
|
249 | 250 | <span class="cp">#include</span> <span class="cpf"><a href="../../thread.html"><thread></a></span><span class="cp"></span>
|
@@ -276,9 +277,47 @@ <h2>例</h2>
|
276 | 277 | <span class="p">}</span>
|
277 | 278 | </code></pre></div>
|
278 | 279 | </div></p>
|
279 |
| -<h3>出力例</h3> |
| 280 | +<h4>出力例</h4> |
280 | 281 | <p><pre><code>3
|
281 | 282 | </code></pre></p>
|
| 283 | +<h3>例2</h3> |
| 284 | +<p><div class="yata" id="dc081e75f5d556dbdd5ef6c3a8e10148c060ba3b"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../iostream.html"><iostream></a></span><span class="cp"></span> |
| 285 | +<span class="cp">#include</span> <span class="cpf"><a href="../../future.html"><future></a></span><span class="cp"></span> |
| 286 | +<span class="cp">#include</span> <span class="cpf"><a href="../../chrono.html"><chrono></a></span><span class="cp"></span> |
| 287 | + |
| 288 | +<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> |
| 289 | +<span class="p">{</span> |
| 290 | + <span class="n"><a href="../promise.html">std::promise</a></span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">p</span><span class="p">;</span> |
| 291 | + <span class="n">std</span><span class="o">::</span><span class="n">future</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">f</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">get_future</span><span class="p">();</span> |
| 292 | + <span class="k">const</span> <span class="k">auto</span> <span class="n">ready</span> <span class="o">=</span> <span class="p">[</span><span class="o">&</span><span class="n">f</span><span class="p">]</span> <span class="p">{</span> |
| 293 | + <span class="k">return</span> <span class="n">f</span><span class="p">.</span><span class="n"><span style="color:#ff0000">wait_for</span></span><span class="p">(</span><span class="n"><a href="../../chrono/duration_aliases.html">std::chrono::seconds</a></span><span class="p">{</span><span class="mi">0</span><span class="p">})</span> <span class="o">==</span> <span class="n"><a href="../future_status.html">std::future_status</a></span><span class="o">::</span><span class="n">ready</span><span class="p">;</span> |
| 294 | + <span class="p">};</span> |
| 295 | + |
| 296 | + <span class="c1">// まだ値はセットされていない</span> |
| 297 | + <span class="n"><a href="../../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n"><a href="../../ios/boolalpha.html">std::boolalpha</a></span> <span class="o"><<</span> <span class="n">ready</span><span class="p">()</span> <span class="o"><<</span> <span class="n"><a href="../../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 298 | + |
| 299 | + <span class="n"><a href="../promise/set_value.html">p.set_value</a></span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> |
| 300 | + |
| 301 | + <span class="c1">// 値がセットされた</span> |
| 302 | + <span class="n"><a href="../../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n"><a href="../../ios/boolalpha.html">std::boolalpha</a></span> <span class="o"><<</span> <span class="n">ready</span><span class="p">()</span> <span class="o"><<</span> <span class="n"><a href="../../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 303 | + |
| 304 | + <span class="n"><a href="../shared_future/get.html">f.get()</a></span><span class="p">;</span> <span class="c1">// 一度値を取り出すと共有状態が破棄される</span> |
| 305 | + |
| 306 | + <span class="c1">// 共有状態を持たない(<a href="valid.html">valid()</a> == falseな)futureでwaitをすると<a href="../future_error.html">std::future_error</a>例外</span> |
| 307 | + <span class="k">try</span> <span class="p">{</span> |
| 308 | + <span class="n">ready</span><span class="p">();</span> |
| 309 | + <span class="p">}</span> |
| 310 | + <span class="k">catch</span><span class="p">(</span><span class="k">const</span> <span class="n"><a href="../future_error.html">std::future_error</a></span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span> |
| 311 | + <span class="n"><a href="../../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n"><a href="../../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 312 | + <span class="p">}</span> |
| 313 | +<span class="p">}</span> |
| 314 | +</code></pre></div> |
| 315 | +</div></p> |
| 316 | +<h4>出力例</h4> |
| 317 | +<p><pre><code>false |
| 318 | +true |
| 319 | +std::future_error: No associated state |
| 320 | +</code></pre></p> |
282 | 321 | <h2>バージョン</h2>
|
283 | 322 | <h3>言語</h3>
|
284 | 323 | <ul>
|
|
0 commit comments