Il problema è che poiché puoi usare std: bind in un ciclo con un numero arbitrario di iterazioni, la memoria non può essere in linea. Non sembra essere in pila, dal momento che non sembra generare perdite di memoria. Sembra, quindi, che debba essere in pila: ALCUNE pile. Ho un'applicazione che potrebbe facilmente fare centinaia di migliaia di questi collegamenti che configurano le chiamate a un utente dell'infraus. Dal momento che il chiamante potrebbe presumibilmente andare fuori campo mentre la minaccia è ancora in funzione, e dal momento che l'Infisyser ha bisogno del binding fino a quando non esegue il lavoro, tali informazioni devono essere memorizzate SOMEWHERE. Dove si trova e come lo pulisco quando i legami hanno raggiunto il loro scopo?
Esempio:
std::function<void()> *Jobs;
Jobs = new std::function<void()> Jobs[nJobs];
for (i=0; i<nJobs; ++i)
{
Jobs[i] = std::bind (funtion, args, ...);
}
ThreadPool->QueueJobs (Jobs, nJobs); // store POINTERS to jobs
ThreadPool->WaitForCompletion();
delete Jobs;
Sembra che funzioni?