我正在使用vc ++ 2013 express版。 我正在研究c ++ 11的一些新功能,如std :: async和std :: future。
我有一个Foo类,std::shared_ptr<std::vector<unsigned int> >
。
在Foo ctor中,我使用std :: make_shared在堆中分配向量;
来自Foo.h
Class Foo{
public:
Foo();
private:
std::shared_ptr<std::vector<unsigned int> > testVector;
unsigned int MAX_ITERATIONS = 800000000;
void fooFunction();
}
来自Foo.cpp
Foo::Foo(){
testVector = std::make_shared<std::vector<unsigned int> >();
//fooFunction(); this take about 20 sec
std::async(std::launch::async, &Foo::fooFunction, this).get(); // and this about the same!!
}
void Foo:fooFunction(){
for (unsigned int i = 0; i < MAX_ITERATIONS; i++){
testVector->push_back(i);
}
}
问题是我在调用std :: async(std :: launch :: async,&amp; Foo :: fooFunction,this)之间看不到任何好处.get();和fooFunction();
为什么? 任何帮助将不胜感激。 最好的问候
答案 0 :(得分:2)
对未来调用get()
会使其等到结果可用,然后返回。所以,即使它是异步运行的,你只是在等待结果。
std::async
并没有神奇地并行化for
中的Foo::fooFunction
循环。