基本的に達成したいのは、作業が利用可能になったときにtask_groupの新しい作業項目をスケジュールすることです。task_groupでは、run()メソッドがプロデューサーコンシューマーシナリオで呼び出されます。これにより、作業が必要なときにいつでも、task_groupで実行されるようにスケジュールされます。
Concurrency::task_group taskGroup;
tempalte <typename Functor>
void queue_work(Functor& fn)
{
taskGroup.run([&fn](){
fn();
});
}
task_groupは、(アプリを終了する前に)wait()メソッドを呼び出してリソースを解放する必要があります。キャンセルのサポートも必要なため、task_groupを使用しますが、wait()を呼び出す必要があるため、設計が複雑になります。実際には、タスクグループでwait()を呼び出すための追加のスレッドを使用する必要があるようです(wait()を1回呼び出した後、task_groupで新しい作業をスケジュールすることが合法かどうかはわかりません。 wait()を繰り返し実行してください)。
マイクロソフトのpplを使用してどのようにそれを行いますか?
MSDNのドキュメントを 編集すると、wait()を複数回呼び出すことができます。http: //msdn.microsoft.com/en-us/library/dd470481.aspx "task_groupオブジェクトでwaitを呼び出すと、オブジェクトがクリーンな状態にリセットされます。再利用されます。これには、task_groupオブジェクトがキャンセルされた場合も含まれます。」
残っているのは、別のアプローチを取ることができるかどうかだけです