Thread Handling
-
Hallo!
Meine Applikation soll für gleichzeitiges Abarbeiten mehrerer Aufgaben Threads verwenden. Nun weiß ich nicht genau wie ich es anstellen soll, dass die App solange wartet (1) bis alle Threads beendet worden sind bzw. wie ich alle Threads sofort beende sobald ein Fehler innerhalb eines Threads aufgetreten ist (2).
(1) Gibt es eine API die überprüft ob Thread X noch läuft und wie mache ich das am besten (schwierig zu erklären). Hier mal ein bisschen Code zur Verdeutlichung.
// ... Code vorher ::CreateThread(/* 1. Thread starten*/); ::CreateThread(/* 2. Thread starten*/); ::CreateThread(/* 3. Thread starten*/); ::CreateThread(/* 4. Thread starten*/); ::CreateThread(/* 5. Thread starten*/); // Auf Threads warten while(!thread_1_ende && !thread_2_ende ... ) { // tue nichts außer warten }Die Variable "thread_n_ende" ist vom Typ bool und wird jedem Thread in einer Struktur mitgegeben und beim Beenden des Threads auf true gesetzt.
Gibt es dafür eine professionelle Lösung oder hätte jemand einen anderen Ansatz?
Wäre die API WaitForSingleObject hier für jeden Thread angebracht oder sogar WaitForMultipleObjects?(2): Es sollen alle anderen Threads beendet werden sobald in einem anderen ein Fehler auftritt. Derzeit habe ich auch eine Zeigervariable vom Typ bool in der Struktur, die jedem Thread als LPVOID Parameter übergeben wird. Innerhalb der Threads und geprüft wird ob diese true ist. Auch hier suche ich eine elegantere Lösung.
P.S.: Ich hoffe ich konnte so halbwegs mein Problem verdeutlichen.
-
Verwende
WaitForMultipleObjectshttp://msdn.microsoft.com/library/en-us/dllproc/base/waitformultipleobjects.asp
mit den entsprechenden Anzahl von Thread-Handles und bWaitAll=TRUE...