Thread beendet?



  • Ich starte ein Programm. Dieses startet ein Thread. Wenn dieser Thread beendet wird (durch den Anweder) soll das Hauptprogramm auch beendet werden? Wie prüft man ob ein Thread beendet wurde?



  • Schau dir mal die Funktion WaitForSingleObject in der MSDN an, die kann genau sowaws.



  • Kann ich nicht gebrauchen. Ich brauche eine Möglichkeit in dem das Hauptprogramm eine Nachricht vom Thread bekommt, wenn dieser beendet wurde. Das ganze muss jedoch automatisiert werden. Weil die Abbruchbedingungen vom Anwender festgelegt werden können. Es kann also sein das mein Hauptprogramm gar nicht weiss das die Anwendung beendet wird wenn z.B. F1 gedrückt wirde.

    Der Thread wird noch vom Anwender programmiert! Das Hauptrogramm wird fertig sein und sich in einer Lib befinden. Das Hauptprogramm funktioniert als eine Virtual Machine. Der Thread enthällt sozusagen den Quellcode.

    Es müsste so was sein:

    Hauptprogramm startet.

    Thread wird gestartet.

    Thread wird beendet.

    Hauptprogramm bekommt das mit und kann das System runterfahren.

    Die Prüfung ob der Thrad läuft darf das Programm nicht "belasten".



  • üpop schrieb:

    Ich brauche eine Möglichkeit in dem das Hauptprogramm eine Nachricht vom Thread bekommt, wenn dieser beendet wurde.

    Dann eben RegisterWaitForSingleObject. Das funktioniert aber erst ab Windows 2000. Für die früheren Versionen müsstest Du einen extra (Überwachungs-)Thread starten, der WaitForSingle/ MultipleObject/ s für Dich aufruft und, wenn der zu überwachende Thread endete, eine Nachricht an das Hauptprogramm absetzt (z.B. per PostMessage).

    BTW: Wenn ich auf F1 drücke, geht die Hilfe auf. Damit habe ich garantiert noch nie ein Programm beendet. Ob das so gut ist?



  • Ich verstehe nicht, warum das so schwierig sein soll!? Wenn du nur mitbekommen willst, wann dein Thread zu Ende ist, dann reicht es doch völlig aus, in der letzten Zeile in der ThreadProc ein PostMessage mit einer selbstdefinierten Message an den Hauptthread zu schicken. Dann weißt du, dass der Thread beendet wurde. Um ganz sicher zu gehen kannst du im Hauptthread ja noch ein WaitForSingleObject() aufrufen, welches wartet, bis der Thread signalisiert (beendet) ist.


Anmelden zum Antworten