packaged_task クラス
呼び出しラッパーであり、呼び出しシグネチャが Ty(ArgTypes...)
である非同期プロバイダーを記述します。 その関連付けられた非同期状態には、可能性がある結果に加えて呼び出し可能オブジェクトのコピーが保持されます。
構文
template <class>
class packaged_task;
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
packaged_task | packaged_task オブジェクトを構築します。 |
packaged_task::~packaged_task デストラクター | packaged_task オブジェクトを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
get_future | 同じ関連付けられた非同期状態の future オブジェクトを返します。 |
make_ready_at_thread_exit | 関連付けられた非同期状態に格納された呼び出し可能オブジェクトを呼び出し、戻り値をアトミックに格納します。 |
reset | 関連付けられた非同期状態を置き換えます。 |
スワップ | 関連付けられている非同期状態を指定したオブジェクトと交換します。 |
valid | オブジェクトが関連付けられた非同期状態であるかどうかを指定します。 |
パブリック演算子
名前 | 説明 |
---|---|
packaged_task::operator= | 指定したオブジェクトから、関連付けられた非同期状態を転送します。 |
packaged_task::operator() | 関連付けられた非同期状態に格納された呼び出し可能オブジェクトを呼び出し、戻り値をアトミックに格納し、状態を ready に設定します。 |
packaged_task::operator bool | オブジェクトが関連付けられた非同期状態であるかどうかを指定します。 |
要件
ヘッダー:<future>
名前空間: std
packaged_task::get_future
同じ関連付けられた非同期状態の future<Ty>
型のオブジェクトを返します。
future<Ty> get_future();
解説
packaged_task
オブジェクトが関連付けられた非同期状態ではない場合、このメソッドはエラー コード no_state
で future_error をスローします。
このメソッドが同じ関連付けられた非同期状態の packaged_task
オブジェクトに対して既に呼び出されている場合、このメソッドはエラー コード future_already_retrieved
で future_error
をスローします。
packaged_task::make_ready_at_thread_exit
関連付けられた非同期状態に格納された呼び出し可能オブジェクトを呼び出し、戻り値をアトミックに格納します。
void make_ready_at_thread_exit(ArgTypes... args);
解説
packaged_task
オブジェクトが関連付けられた非同期状態ではない場合、このメソッドはエラー コード no_state
で future_error をスローします。
このメソッドまたは make_ready_at_thread_exit が同じ関連付けられた非同期状態の packaged_task
オブジェクトに対して既に呼び出されている場合、このメソッドはエラー コード promise_already_satisfied
で future_error
をスローします。
それ以外の場合、この演算子は INVOKE(fn, args..., Ty)
を呼び出します。ここで、fn は関連付けられた非同期状態に格納された呼び出し可能オブジェクトです。 すべての戻り値は、関連付けられた非同期状態の返された結果としてアトミックに格納されます。
packaged_task::operator()とは異なり、呼び出し元のスレッド内のすべてのスレッド ローカル オブジェクトが破棄されるまで、関連付けられている非同期状態はready
に設定されません。 通常、関連付けられた非同期状態でブロックされているスレッドは、呼び出し元のスレッドが終了するまでブロックが解除されません。
packaged_task::operator=
関連付けられた非同期状態を、指定されたオブジェクトから転送します。
packaged_task& operator=(packaged_task&& Right);
パラメーター
Right
packaged_task
オブジェクト。
戻り値
*this
解説
操作の後、Right に関連付けられた非同期状態は既にありません。
packaged_task::operator()
関連付けられた非同期状態に格納された呼び出し可能オブジェクトを呼び出し、戻り値をアトミックに格納し、状態を ready に設定します。
void operator()(ArgTypes... args);
解説
packaged_task
オブジェクトが関連付けられた非同期状態ではない場合、このメソッドはエラー コード no_state
で future_error をスローします。
このメソッドまたは make_ready_at_thread_exit が同じ関連付けられた非同期状態の packaged_task
オブジェクトに対して既に呼び出されている場合、このメソッドはエラー コード promise_already_satisfied
で future_error
をスローします。
それ以外の場合、この演算子は INVOKE(fn, args..., Ty)
を呼び出します。ここで、fn は関連付けられた非同期状態に格納された呼び出し可能オブジェクトです。 すべての戻り値は、関連付けられた非同期状態の返された結果としてアトミックに格納され、状態が ready に設定されます。 その結果、関連付けられた非同期状態でブロックされているすべてのスレッドがブロック解除されます。
packaged_task::operator bool
オブジェクトが associated asynchronous state
であるかどうかを指定します。
operator bool() const noexcept;
戻り値
オブジェクトが関連付けられた非同期状態である場合は true
を返します。それ以外の場合は false
を返します。
packaged_task::packaged_task コンストラクター
packaged_task
オブジェクトを構築します。
packaged_task() noexcept;
packaged_task(packaged_task&& Right) noexcept;
template <class Fn>
explicit packaged_task(Fn&& fn);
template <class Fn, class Alloc>
explicit packaged_task(
allocator_arg_t, const Alloc& alloc, Fn&& fn);
パラメーター
Right
packaged_task
オブジェクト。
alloc
メモリ割り当て。 詳細については、「<allocators>」を参照してください。
fn
関数オブジェクトを指定します。
解説
1 つ目のコンストラクターは、関連付けられた非同期状態がない packaged_task
オブジェクトを構築します。
2 つ目のコンストラクターは、packaged_task
オブジェクトを構築し、Right から関連付けられた非同期状態を転送します。 操作の後、Right に関連付けられた非同期状態は既にありません。
3 つ目のコンストラクターは、関連付けられた非同期状態に格納された fn のコピーを持つ packaged_task
オブジェクトを構築します。
4 つ目のコンストラクターは、関連付けられた非同期状態に格納された fn のコピーを持つ packaged_task
オブジェクトを構築し、メモリ割り当てのために alloc
を使用します。
packaged_task::~packaged_task デストラクター
packaged_task
オブジェクトを破棄します。
~packaged_task();
解説
関連付けられた非同期状態がreadyでない場合、デストラクターは、関連付けられた非同期状態の結果としてbroken_promise
のエラー コードを持つfuture_error例外を格納し、関連付けられた非同期状態でブロックされているスレッドはすべてブロック解除されます。
packaged_task::reset
新しい関連付けられた非同期状態を使用して、既存の関連付けられた非同期状態を置き換えます。
void reset();
解説
実際には、このメソッドは *this = packaged_task(move(fn))
を実行します。ここで、fn は、このオブジェクトの関連付けられた非同期状態に格納された関数オブジェクトです。 そのため、オブジェクトの状態がクリアされ、 get_future、 operator()、および make_ready_at_thread_exit は、新しく構築されたオブジェクトの場合と同様に呼び出すことができます。
packaged_task::swap
関連付けられている非同期状態を指定したオブジェクトと交換します。
void swap(packaged_task& Right) noexcept;
パラメーター
Right
packaged_task
オブジェクト。
packaged_task::valid
オブジェクトが associated asynchronous state
であるかどうかを指定します。
bool valid() const;
戻り値
オブジェクトが関連付けられた非同期状態である場合は true
を返します。それ以外の場合は false
を返します。