2017-02-06 4 views
0

Hallo an alle, Ich verwende Multi Threading in C++ 11. Ich möchte einen Mechanismus machen, in dem alle laufenden und abgeschlossenen Threads verfolgt werden. Wenn ein Thread beendet wird, wird automatisch der beendete Thread erstellt. Hat jemand eine Idee, wie man das in C++ 11 implementiert? Vielen Dank im Voraus.Wie verfolgen Sie die Beendigung des Threads in C++ 11

+1

Ich gehe davon aus, dass Sie * den abgeschlossenen Thread * beitreten werden? Eine einfache Lösung ist nur ein atomares boolesches Flag, das der Thread vor dem Beenden zuletzt setzt. Der Hauptthread fragt dieses Flag ab, und wenn es gesetzt ist, dann trete dem Thread bei. –

+0

Um den @Someprogrammerdude-Kommentar hinzuzufügen, beachten Sie, dass einige * -Thread-Bibliotheken * (z. B. * pthreads *) einen zusätzlichen * nicht blockierenden Join * enthalten, der das Problem des * polling * des * thread-Status * vor dem * Beitritt * beseitigt. Es könnte weniger effizient sein, aber es sollte zu einem saubereren Design führen. –

+0

Danke für deine Wiederholung @Someprogrammerdude. Ich habe noch nie eine atomare Flagge benutzt. Wo sollte ich diese boolesche Flagge in meinem Programm hinzufügen müssen? –

Antwort

0

gemeinsame Muster-Code zu schreiben, die Ausnahmen wickeln Sie es in einer Schleife und versuchen, Block, wie dies überlebt:

for(;;) { 
    try { 
     // Your code here 
    } catch (const std::exception& e) { 
     // Log exception 
    } catch (...) { 
     // Log unknown exception 
    } 
} 

Es ist üblich, in Server: wenn dient Benutzeranforderung fehlschlägt, dann melden Sie es, Die aktuelle Verbindung abbrechen und versuchen, die nächste Verbindung herzustellen. Natürlich besteht die Möglichkeit, dass etwas wirklich Schreckliches passiert ist und alle weiteren Versuche scheitern. Sie müssen also darauf achten, Ihren PC nicht mit einer Endlosschleife zu überlasten, die es immer wieder versucht.

Sie können diese Schleife in Ihren Thread einfügen, so dass sie nicht abstürzt, wenn etwas passiert, oder anstatt Threads direkt zu verwenden, können Sie std::future verwenden und den Code future.get() in diese Schleife einfügen.

Verwandte Themen