task_group::run メソッド
task_group オブジェクトでタスクをスケジュールします。 task_handle オブジェクトが run にパラメーターとして渡される場合、task_handle オブジェクトの有効期間は呼び出し元によって管理されます。 関数オブジェクトへの参照をパラメーターとして受け取るメソッドのバージョンでは、ランタイム内でのヒープ割り当てが含まれる場合があります。これを、task_handle オブジェクトへの参照を受け取るバージョンと比較した場合、パフォーマンスが低下することがあります。
template<
typename _Function
>
void run(
const _Function& _Func
);
template<
typename _Function
>
void run(
task_handle<_Function>& _Task_handle
);
パラメーター
_Function
タスク ハンドルの本体を実行するために呼び出される関数オブジェクトの型。_Func
タスクの本体を呼び出すために呼び出される関数。 ラムダ式、またはシグネチャ void operator()() を持つ関数呼び出し演算子のバージョンをサポートするその他のオブジェクトを使用できます。_Task_handle
スケジュールする作業へのハンドル。 呼び出し元はこのオブジェクトの有効期間を管理します。 ランタイムは、引き続き wait メソッドまたは run_and_wait メソッドがこの task_group オブジェクトで呼び出されるまでオブジェクトが持続すると見なします。
解説
ランタイムは指定された処理関数を後から実行するようにスケジュールしますが、これは呼び出し元の関数が戻った後になることがあります。 このメソッドでは、task_handle オブジェクトを使用して、指定された処理関数のコピーを保持します。 そのため、このメソッドに渡した関数オブジェクトで発生した状態の変化は、その関数オブジェクトのコピーには反映されません。 さらに、ポインター渡し、または参照渡しで処理関数に渡した任意のオブジェクトの有効期間は、処理関数が戻るまで有効なままであることに注意してください。
例外からのスタック アンワインドの結果として task_group が破棄される場合は、事前に wait メソッドまたは run_and_wait メソッドの呼び出しが行われたことを保証する必要はありません。 その場合、デストラクターは適切にキャンセル処理を行い、_Task_handle パラメーターで表されるタスクが完了するのを待ちます。
_Task_handle パラメーターによって指定されたタスク ハンドルが run メソッドを介して既にタスク グループ オブジェクトにスケジュールされていて、このタスク グループで wait メソッドまたは run_and_wait メソッドに対する中間の呼び出しがない場合、このメソッドは invalid_multiple_scheduling 例外をスローします。
必要条件
ヘッダー: ppl.h
名前空間: Concurrency