2012-03-31 13 views
0

私が基本的に遂行したいのは、作業が利用可能になると、新しい作業項目task_groupをスケジュールすることです。 task_group上でrun()メソッドは、プロデューサconsummerシナリオで呼び出される - このような作業のような任意の所与の瞬間にPPL task_groupスケジュール作業と蓄積されたリソースの清掃

Concurrency::task_group taskGroup; 

tempalte <typename Functor> 
void queue_work(Functor& fn) 
{ 
    taskGroup.run([&fn](){ 
     fn(); 
    }); 
} 

task_groupが必要task_group上で実行するようにスケジュールされている必要がある(アプリを終了する前に)そのメソッドはwait()メソッドを呼び出してリソースを解放します。キャンセルをサポートする必要があるので、私はtask_groupを使用しますが、wait()を呼び出す必要は設計を複雑にします。実際には、タスクグループのwait()を呼び出すスレッドを追加する必要があるようです(wait()を一度呼び出した後にtask_groupに新しい作業をスケジュールすることが合法であるかどうかは分かりません) wait()を繰り返し実行します)。

マイクロソフトからpplを使用してどうすればよいですか?

(待機を呼び出すことが合法であるEDIT MSDNのドキュメントの状態は)複数回: http://msdn.microsoft.com/en-us/library/dd470481.aspx は「task_groupオブジェクト上で待機を呼び出すと、それが再利用できるクリーンな状態にリセットされますこれは、ケースを含んでいます。 task_groupオブジェクトがキャンセルされました。

だけの事1は別のアプローチを取ることができればとなり、残りの

答えて

0

これに対する私のソリューションは、私は時間からtask_group.wait()を呼び出し、そこからCurrentScheduler :: ScheduleTask()によって作成された専用のタスクを使用した後に、すべてのでした蓄積された並行性スケジューラリソースをクリーンアップするために時間を費やす。

アプリケーションは、私はそれが(うまくクリーンアップするために)

を自分自身を終了しなければならないことは、このタスクにかかわらず、通知する必要があります終了したいです
関連する問題