<future>
標準ヘッダー <future> をインクルードして、クラス テンプレートとサポート テンプレートを定義します。これらのクラスやテンプレートによって、関数の実行 (場合によっては個別のスレッドでの実行) やその結果の取得が簡略化されます。 結果は、関数によって返される値、または関数によって生成されるが関数ではキャッチされない例外になります。
このヘッダーではコンカレンシー ランタイム (ConcRT) が使用されます。これにより、このヘッダーを他の ConcRT メカニズムと共に使用できます。 ConcRT の詳細については、「コンカレンシー ランタイム」を参照してください。
構文
#include <future>
解説
Note
/clr を使用してコンパイルされたコードでは、このヘッダーはブロックされます。
非同期プロバイダーは、関数呼び出しの結果を格納します。 関数呼び出しの結果を取得するには、非同期のリターン オブジェクトを使用します。 関連付けられた非同期状態によって、非同期プロバイダーと 1 つ以上の非同期のリターン オブジェクトの間で通信を実行できます。
プログラムでは、関連付けられた非同期状態のオブジェクトは直接作成されません。 プログラムでは、必要に応じて非同期プロバイダーが作成され、その非同期プロバイダーに基づいて非同期のリターン オブジェクトが作成されます。このリターン オブジェクトでは、その関連付けられた非同期状態がプロバイダーと共有されます。 非同期プロバイダーと非同期のリターン オブジェクトによって、共有済みの関連付けられた非同期状態を保持するオブジェクトが管理されます。 関連付けられた非同期状態を参照する最後のオブジェクトが、その参照を解放すると、関連付けられた非同期状態を保持するオブジェクトが破棄されます。
非同期プロバイダーや、関連付けられた非同期状態を保持しない非同期のリターン オブジェクトは、空になります。
関連付けられている非同期状態は、非同期プロバイダーが戻り値を格納した場合か例外を格納した場合のみ準備完了になります。
テンプレート関数 async
、およびクラス テンプレート promise
と packaged_task
は、非同期プロバイダーです。 クラス テンプレート future
と shared_future
は、非同期のリターン オブジェクトを記述します。
各クラス テンプレート (promise
、future
、shared_future
) は、void
型に特殊化されています。また、参照渡しによる値の格納と取得用に部分的に特殊化されています。 これらの特殊化がプライマリ テンプレートと異なる点は、戻り値を格納および取得する関数のシグネチャとセマンティクスだけです。
クラス テンプレート future
と shared_future
では、それらのデストラクターでブロックは実行されません。ただし、下位互換性のために次のような例外が 1 つだけあります。future
で開始されたタスクにアタッチされている shared_future
(または最後の std::async
) では、他のすべての future とは異なり、タスクが完了していない場合にデストラクターでブロックが実行されます。つまり、デストラクターがブロックするのは、スレッドがまだ .get()
や .wait()
を呼び出しておらず、タスクが実行中の場合です。 下書き標準の std::async
の説明に、次の使いやすさに関するメモが追加されました。"[注: std::async から取得した将来がローカル スコープ外に移動された場合、将来を使用する他のコードは、将来のデストラクターが共有状態を準備するためにブロックする可能性があることに注意する必要があります。-end note]" 他のすべての場合、 future
デストラクターと shared_future
デストラクターは必須であり、ブロックされることは決して保証されません。
メンバー
クラス
名前 | 説明 |
---|---|
future クラス | 非同期のリターン オブジェクトを記述します。 |
future_error クラス | future オブジェクトを管理する型のメソッドによってスローされる例外オブジェクトを記述します。 |
packaged_task クラス | 呼び出しラッパーであり、呼び出しシグネチャが Ty(ArgTypes...) である非同期プロバイダーを記述します。 その関連付けられた非同期状態には、可能性がある結果に加えて呼び出し可能オブジェクトのコピーが保持されます。 |
promise クラス | 非同期プロバイダーを記述します。 |
shared_future クラス | 非同期のリターン オブジェクトを記述します。 future オブジェクトとは異なり、非同期プロバイダーを任意の数の shared_future オブジェクトに関連付けることができます。 |
構造体
名前 | 説明 |
---|---|
is_error_code_enum 構造体 | future_errc が error_code の格納に適していることを示す特殊化です。 |
uses_allocator 構造体 | 常に true を保持する特殊化です。 |
関数
名前 | 説明 |
---|---|
async | 非同期プロバイダーを表します。 |
future_category | error_category オブジェクトに関連するエラーの特性を設定する future オブジェクトへの参照を返します。 |
make_error_code | error_code エラーの特性を設定する error_category オブジェクトを保持する future を作成します。 |
make_error_condition | error_condition エラーの特性を設定する error_category オブジェクトを保持する future を作成します。 |
スワップ | 関連付けられた非同期状態を、promise オブジェクト間で交換します。 |
列挙型
名前 | 説明 |
---|---|
future_errc | future_error クラスによって報告されるエラーのシンボル名を提供します。 |
future_status | 期限が設定された wait 関数から返される理由のシンボル名を提供します。 |
launch | テンプレート関数 async で使用できるモードを示すビットマスク型を表します。 |