2017-01-23 3 views
0

Ich weiß, dass viele Leute diese Frage gestellt haben, aber ich bin nicht "viele Leute" und ich brauche eine andere und eine bessere Erklärung zu verstehen.Was "detach()" auf Thread tut? CPP

Die Member-Funktion "detach()" was genau tut es? Ich habe versucht, das nächste Codebeispiel ausgeführt wird:

#include <iostream> 
#include <chrono> 
#include <thread> 

void independentThread() 
{ 
    std::cout << "Starting concurrent thread.\n"; 
    std::this_thread::sleep_for(std::chrono::seconds(200)); 
    std::cout << "Exiting concurrent thread.\n"; 
} 

void threadCaller() 
{ 
    std::cout << "Starting thread caller.\n"; 
    std::thread t(independentThread); 
    t.detach(); 
    std::this_thread::sleep_for(std::chrono::seconds(1)); 
    std::cout << "Exiting thread caller.\n"; 
} 

int main() 
{ 
    threadCaller(); 
    std::this_thread::sleep_for(std::chrono::seconds(5)); 
} 

Und nach 5 Sekunden geschlossen das ganze Programm. Ich dachte, das Programm wird weitere 195 Sekunden nach dem "Haupt" geöffnet werden, weil die ganze Idee von "trennen" ist unabhängig mit dem Haupt, so in unabhängiger Weise sollte es noch laufen, bis alle abgelösten Theraden beendet sind ... Ich habe die Dokumentation gelesen und bin hierher gekommen. Eine bessere Erklärung - bitte! :)

+0

machen Sie Ihr Leben einfacher mit ['std :: async'] (http://en.cppreference.com/w/cpp/thread/async). –

Antwort

0

Detached Thread ist ein Thread, auf den Sie nicht warten können, um abzuschließen. std::thread Destruktor überprüft, ob der Thread entweder getrennt oder verbunden ist, und wenn beides nicht passiert, wird ein Programm abgebrochen (Anruf std::terminate).

Nachdem die main() beendet wurde, endet das Programm auch unbedingt und wartet nicht auf Threads, losgelöst oder auf andere Weise.

+0

Ich habe dich nicht verstanden ... Also warum ist es nötig ?! In Python zum Beispiel gibt es kein "detach" und das Programm bricht nicht ab! Warum muss ich es benutzen? Was ist es für mich? –

+0

@fdwfgwdfwdfv, hilft Ihnen wahrscheinlich in keiner Weise. Vielleicht möchten Sie bei Python bleiben. – SergeyA

+0

Bitte erklären Sie es besser, damit ich verstehen kann. Ich habe nicht mehr gefragt als dieser Mann: \ –