0

基本的に達成したいのは、作業が利用可能になったときに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オブジェクトがキャンセルされた場合も含まれます。」

残っているのは、別のアプローチを取ることができるかどうかだけです

4

1 に答える 1

0

これに対する私の解決策は、結局、CurrentScheduler :: ScheduleTask()によって作成された専用タスクを使用して、蓄積された同時実行スケジューラリソースをクリーンアップするためにtask_group.wait()を時々呼び出すことでした。

アプリケーションが終了したいとき、私はこのタスクにそれ自体が終了しなければならないことを通知する必要があります(きれいにクリーンアップするために)

于 2012-04-01T12:46:11.193 に答える