C++ 如何将期货放入容器中?
我试图将async生成的未来放在一个向量中,因此我不必执行以下操作:C++ 如何将期货放入容器中?,c++,multithreading,c++11,C++,Multithreading,C++11,我试图将async生成的未来放在一个向量中,因此我不必执行以下操作: auto f1 = async(....); auto f2 = async(....); ... f1.get(); f2.get(); ... 我在这段代码中收到的编译错误是“调用已删除的'std::_1::future'构造函数”。有谁能帮我正确地做这件事吗。也不确定是否要将未来的复制到向量中 void AudioAnalyzer::retrieve() { deque<shared_ptr<Aud
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);
}
}
}
void AudioAnalyzer::retrieve()
{
dequetempData(数据);
矢量期货;
对于(int i=0;i
期货不可复制,但可移动复制。您需要将它们移动到容器中:
futures.push_back(std::move(f));
在这里,
std::move(f)
看起来像一个右值,导致选择了正确的重载。如果您使用的是C++11,还可以使用std::vector的新的emplace\u back
操作符,如下所示:
futures.emplace_back(std::async(std::launch::async, f));
这将在适当的位置构造std::future
对象(直接进入std::vector),从而避免复制或移动未来
请参见注意,您也可以直接使用
futures.push_back(异步(..)代码>。