Ich entwickle gerade ein Programm, das einige Bilder vom Socket-Server herunterladen muss, und die Download-Arbeit wird lange dauern. Also, ich erstelle eine neue std::thread
, um das zu tun.Wie man einen Std :: Thread beendet?
Sobald es heruntergeladen wird, wird die std::thread
eine Mitgliedsfunktion der aktuellen Klasse aufrufen, aber diese Klasse wurde wahrscheinlich freigegeben. Also, ich habe eine Ausnahme.
Wie löst man dieses Problem?
void xxx::fun1()
{
...
}
void xxx::downloadImg()
{
...a long time
if(downloadComplete)
{
this->fun1();
}
}
void xxx::mainProcees()
{
std::thread* th = new thread(mem_fn(&xxx::downloadImg),this);
th->detach();
//if I use th->join(),the UI will be obstructed
}
Willkommen bei Stack Overflow! Ich habe deine Frage soweit bearbeitet, wie ich dein Problem erraten konnte. Fügen Sie jedoch eine Erläuterung des Codes und der Beschreibung hinzu, damit mehr Personen mit Wissen über das Thema sie sehen können. Bitte editieren Sie in der spezifischen Fehlermeldung, die Sie antreffen, falls es notwendig ist, das spezifische Problem zu identifizieren. Viel Glück! – manetsus
Warum verwenden Sie kein 'std :: future'? –
Superlokkus
Mögliches Duplikat von [C++ 0x Thread-Unterbrechung] (http://stackoverflow.com/questions/2790346/c0x-thread-interruption) – kfsone