我试图将异步生成的 future 放入向量中,这样我就不必执行以下操作:
auto f1 = async(....);
auto f2 = async(....);
...
f1.get();
f2.get();
...
我收到的此代码的编译错误是“调用已删除的‘std::_1::future’构造函数”。任何人都可以帮助我如何正确地做到这一点。也不确定是否将未来复制到向量中。
void AudioAnalyzer::retrieve()
{
deque<shared_ptr<AudioAnalysis>>tempData(data);
vector<future<void>> futures;
for (int i = 0; i < NUM_THREADS; ++i)
{
auto f = async(bind(&AudioAnalyzer::analysisThread, this, _1), ref(tempData));
futures.push_back(f);
}
for (auto& f : futures)
{
f.get();
}
}
void AudioAnalyzer::analysisThread(deque<shared_ptr<AudioAnalysis>>& aq )
{
while (true)
{
m.lock();
if (aq.size() == 0)
{
m.unlock();
break;
}
auto aa = aq.front();
aq.pop_front();
m.unlock();
if (false) //testing
{
retrieveFromDb(aa);
}
else
{
analyzeAudio(aa);
}
}
}
期货不可复制,但可移动复制。您需要将它们移动到容器中:
futures.push_back(std::move(f));
Here, std::move(f)
看起来像一个右值,结果是正确的std::vector<future<void>>::push_back http://en.cppreference.com/w/cpp/container/vector/push_back正在选择过载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)