Da unten:C++ 11: Was passiert, wenn Sie nicht beitreten nennen() für std :: thread
void test()
{
std::chrono::seconds dura(20);
std::this_thread::sleep_for(dura);
}
int main()
{
std::thread th1(test);
std::chrono::seconds dura(5);
std::this_thread::sleep_for(dura);
return 0;
}
main
nach 5 Sekunden verlassen wird, was zu th1
passieren wird, dass nach wie vor ist die Ausführung?
Wird die Ausführung bis zur Fertigstellung fortgesetzt, auch wenn das th1
Thread-Objekt, das Sie in main
definiert haben, den Geltungsbereich verlässt und zerstört wird?
Sitzt th1
einfach dort, nachdem es fertig ausgeführt wurde oder irgendwie aufgeräumt wird, wenn das Programm beendet wird?
Was ist, wenn der Thread in einer Funktion erstellt wurde, nicht main
- bleibt der Thread so lange bestehen, bis das Programm beendet wird oder wenn die Funktion den Gültigkeitsbereich verlässt?
Ist es sicher, nicht einfach join
für einen Thread aufzurufen, wenn Sie eine Art von Timeout-Verhalten auf dem Thread wollen?
Warum versuchst du es nicht? – Drop
@Drop Weil das keine zuverlässige Möglichkeit ist, über * Garantien * zu lernen. – dyp
@dyp keine Frage auf Stackoverflow ist. Indem er dieses 5-Zeilen-Beispiel kompilierte und ausführte, konnte er wenigstens einen Hinweis finden. Es gibt nur eine Garantiequelle - einen Standard. – Drop