Ich habe den folgenden Code geschrieben, um std::async()
auf Funktionen void
mit GCC 4.8.2 auf Ubuntu zu testen.Wird std :: async garantiert für Funktionen aufgerufen, die void zurückgeben?
#include <future>
#include <iostream>
void functionTBC()
{
std::cerr << "Print here\n";
}
int main(void)
{
#ifdef USE_ASYNC
auto i = std::async(std::launch::async, functionTBC);
#else
auto i = std::async(std::launch::deferred, functionTBC);
#endif
//i.get();
return 0;
}
Wenn i.get();
unkommentiert ist, wird die Meldung "Print here"
immer vorhanden ist; Wenn jedoch i.get();
auskommentiert ist, existiert "Print here"
, wenn und nur wenn USE_ASYNC
definiert ist (dh std::launch::async
führt immer zur Nachricht ausgedruckt, während std::launch::deferred
niemals).
Ist dieses garantierte Verhalten? Wie kann man sicherstellen, dass der asynchrone Aufruf void
ausgeführt wird?
Wenn Sie nach einem verzögerten Start fragen und niemals .get in dieser Zukunft aufrufen, wird Ihre Funktion niemals ausgeführt. Dies hat nichts mit der Funktion zu tun, die void oder irgendeinen anderen Typ zurückgibt. – sbabbi