次の方法で共有


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_statefuture_error をスローします。

このメソッドが同じ関連付けられた非同期状態の packaged_task オブジェクトに対して既に呼び出されている場合、このメソッドはエラー コード future_already_retrievedfuture_error をスローします。

packaged_task::make_ready_at_thread_exit

関連付けられた非同期状態に格納された呼び出し可能オブジェクトを呼び出し、戻り値をアトミックに格納します。

void make_ready_at_thread_exit(ArgTypes... args);

解説

packaged_task オブジェクトが関連付けられた非同期状態ではない場合、このメソッドはエラー コード no_statefuture_error をスローします。

このメソッドまたは make_ready_at_thread_exit が同じ関連付けられた非同期状態の packaged_task オブジェクトに対して既に呼び出されている場合、このメソッドはエラー コード promise_already_satisfiedfuture_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_statefuture_error をスローします。

このメソッドまたは make_ready_at_thread_exit が同じ関連付けられた非同期状態の packaged_task オブジェクトに対して既に呼び出されている場合、このメソッドはエラー コード promise_already_satisfiedfuture_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_futureoperator()、および 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 を返します。

関連項目

ヘッダー ファイル リファレンス
<future>