Ben bir vektör içinde eşzamansız modu tarafından oluşturulan gelecekleri koymak için çalışıyorum, bu yüzden böyle bir şey yapmak gerekmez: Bu kod ile alıyorum derleme hatasıdırFutures'ı bir konteynere nasıl koyarım?
auto f1 = async(....);
auto f2 = async(....);
...
f1.get();
f2.get();
...
"silindi kurucusuna Çağrı 'std :: _ 1 :: future'. Bunu nasıl yapacağı konusunda bana yardımcı olabilir. Geleceğin vektöre kopyalanmasından da emin değilsiniz.
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);
}
}
}
sayesinde mantıklı bakın. –
Ayrıca doğrudan 'futures.push_back (async (..));' kullanabilirsiniz. – Jarod42