che sto cercando di mettere i futuri generati da asincrona in un vettore, quindi non c'è bisogno di fare qualcosa di simile:Come si inseriscono i future in un container?
auto f1 = async(....);
auto f2 = async(....);
...
f1.get();
f2.get();
...
l'errore di compilazione che sto ricevendo con questo codice è "Chiamata al costruttore cancellato di 'std :: _ 1 :: future ". Qualcuno può aiutarmi con come farlo correttamente. Non sono sicuro nemmeno di copiare il futuro nel vettore.
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);
}
}
}
Grazie, ha senso. –
Nota che puoi anche usare direttamente 'futures.push_back (async (..));'. – Jarod42