順番にstd::vector< concurrency::task<void> >
ロードされる場合とロードされない場合があるタスクのリストがあります。電話に出くわしましたconcurrency::when_any
が、その使用方法について十分な情報がありません。
呼び出し (ScenarioInput1.xaml.cpp:100) を使用するこの Microsoft サンプルに遭遇しましたが、pair パラメーターと、それを戻り値に適応させる方法がわかりません。
編集:私がやろうとしていること:
struct TaskInfo {
unsigned int uniqueId;
concurrency::task<unsigned int> task;
};
typedef std::vector< TaskInfo > TaskList;
typedef std::vector< unsigned int > TaskReturns;
// Somewhere inside a class, tasks and finished are member variable.
TaskList tasks;
bool finished = false;
// Inside a member function of the same class as above
// Populate the tasks
concurrency::when_any( tasks.begin(), tasks.end() ).then([this](std::vector<unsigned int> ids){
for( std::vector<unsigned int>::iterator list=ids.begin; list != ids.end(); ++ids ) {
// a mutex lock would happen here
for( TaskList::iterator allTasks = tasks.begin(); allTasks != tasks.end(); ++allTasks ) {
if ( *list == allTasks->uniqueId ) { tasks.erase( allTasks ); break; }
}
// mutex unlock
if ( tasks.size() == 0 ) { finished = true; break }
}
}
// In another member function
if ( finished ) doOtherThings();
私がやろうとしていることがよく考えられていない、または効率的でない場合は、お知らせください。