Quello che voglio fare dovrebbe essere abbastanza facile, ma io non capisco ...Usa funzione membro in std :: packaged_task
Tutto quello che voglio fare è quello di avviare una funzione di membro di una classe in sfondo ad un certo punto nel tempo. Il risultato di tale funzione dovrebbe anche essere disponibile "esternamente". Quindi voglio preparare l'attività nel costruttore (impostando la variabile futura, ...) e avviarla in un secondo momento.
Ho provato a combinare std: :(packaged_task | async | future) ma non l'ho fatto funzionare.
Questo frammento non verrà compilato, ma penso che mostra quello che voglio fare:
class foo {
private:
// This function shall run in background as a thread
// when it gets triggered to start at some certain point
bool do_something() { return true; }
std::packaged_task<bool()> task;
std::future<bool> result;
public:
foo() :
task(do_something), // yes, that's wrong, but how to do it right?
result(task.get_future())
{
// do some initialization stuff
.....
}
~foo() {}
void start() {
// Start Task as asynchron thread
std::async as(std::launch::async, task); // Also doesn't work...
}
// This function should return the result of do_something
bool get_result() { return result.get(); }
};
Grazie in anticipo!
'std :: async' è una funzione, non un tipo –