im正在尝试向我的A Star类添加异步方法。我希望能够异步计算路径,以便每个代理都能够独立于其他代理找到其路径。
问题是,目前看来,程序正在等待线程完成。 如何异步执行每个调用?
功能
bool simplePath::navAgent::findPathAsync(int _startX, int _startY, int _endX, int _endY){
auto t1 = std::async([&]{return this->findPath(_startX,_startY,_endX,_endY);});
t1.get();
return true;
}
致电
navComponent->findPathAsync(0,2,30,45);
navComponent->findPathAsync(0,2,123,100);
navComponent->findPathAsync(0,2,8,7);
navComponent->findPathAsync(0,2,8,7);
navComponent->findPathAsync(0,2,8,7);
navComponent->findPathAsync(0,2,8,7);
navComponent->findPathAsync(0,2,8,7);
这是我的错?
答案 0 :(得分:2)
调用t1.get()
时,代码正在等待计算结果。
启动任务时,您没有指定启动策略,因此使用的是默认策略std::launch::async | std::launch::deferred
,它可能根本不会启动单独的线程,并且在您调用{{1 }}。
您需要将lambda更改为通过值而不是通过引用捕获,因为执行lambda时所引用的整数参数可能不再存在。
一个完整的示例是:
t1.get()