Когда вы звоните t1.get()
, ваш код ожидает вычисления результата.
Когда вы запускаете свои задачи, вы не указываете политику запуска, поэтому вы используете политику по умолчанию std::launch::async | std::launch::deferred
, которая может вообще не запускать отдельный поток и может просто лениво оцениваться при вызове t1.get()
.
Вам нужно изменить лямбду на захват по значению, а не по ссылке, поскольку целочисленные параметры, на которые вы ссылаетесь, могут больше не существовать при выполнении вашей лямбды.
Полностью рабочий пример:
std::future<bool> simplePath::navAgent::findPathAsync(int _startX, int _startY, int _endX, int _endY){
return std::async(std::launch::async, []{return this->findPath(_startX,_startY,_endX,_endY);});
}
std::vector< std::future_bool > results;
results.emplace_back(navComponent->findPathAsync(0,2,30,45));
results.emplace_back(navComponent->findPathAsync(0,2,123,100));
results.emplace_back(navComponent->findPathAsync(0,2,8,7));
results.emplace_back(navComponent->findPathAsync(0,2,8,7));
results.emplace_back(navComponent->findPathAsync(0,2,8,7));
results.emplace_back(navComponent->findPathAsync(0,2,8,7));
results.emplace_back(navComponent->findPathAsync(0,2,8,7));
bool result = true;
for ( auto& f : results )
{
result &= f.get();
}