Problem mit Beenden von Threads



  • Hallo,

    habe bei mir im Programm mehrere Threads. Will nun das Programm beenden, habe dabei das Problem, das die Threads immer noch laufen und auf Ressourcen zugreifen. Daher bekomme ich beim Schließen des Programms eine Exception.

    Ich habe eine Klasse Thread, von der sind die anderen Klassen abgeleitet.
    Rufe nun in den Klassen CreateThread(..., run(), ...) den Thread auf. Arbeitet nun die Funktion run ab. Nach einer gewissen Zeit (von mir vorgegeben), soll sich nun der Thread beenden.
    Wie kann ich so was machen?
    Danke

    cash21



  • Um einen Thread zu beenden, solltest du nach Möglichkeit einfach die ThreadProc auslaufen lassen 🙄



  • ThreadProc ist doch die Funktion, die beim CreateThread aufgerufen wird?

    Problem ist das mein Thread laufend auf eine queue zugreift und Elemente entnimmt, daher diese Funktion keine zeitlichen Parameter besitzt. Sie holt einfach immer ein neues Objekt aus der queue, wenn sie aufgerufen wird.

    Daher müsste ich diesen Thread explizit beenden.



  • Dann übergeb dem Thread wie lpParameter (oder so) nen Zeiger auf ne Variable, die du auf true setzt wenn der Thread beendet werden soll und im thread dann hin- und wieder mal den wert der variablen prüfen...



  • geeky schrieb:

    Dann übergeb dem Thread wie lpParameter (oder so) nen Zeiger auf ne Variable, die du auf true setzt wenn der Thread beendet werden soll und im thread dann hin- und wieder mal den wert der variablen prüfen...

    Da wirst du meines erachtens ein Problem haben, denn wenn versucht wird von dem Thread und einem 2ten Thread auf demselben Speicherbereich zu zugreifen wird was schiefgehen. (soweit ich weis, wenn das Schwachsinn ist bitte um Wiederrede).



  • ...es sei denn man syncronisiert den Zugriff auf die Variable z.B. durch ne "Critical Section"



  • Es greifen zwei Threads auf die eine Schlange gleichzeitig zu. Habe es aber mit CriticalSection gemacht, so das die Schlange gesperrt ist.
    Problem ist aber halt, das die Threads sich nicht selbst beenden sondern immer weiter arbeiten. Deswegen wollte ich sie explizit beenden.



  • cash21 schrieb:

    Deswegen wollte ich sie explizit beenden.

    Das sollte man in C++ auf jeden Fall vermeiden, weil dann keine Destruktoren aufgerufen werden. Lass die ThreadProc lieber auslaufen.

    Du könntest z.B. auch ein Event benutzen, um den Threads das Programmende zu signalisieren.



  • Ok. Dann werde ich das mal so versuchen.


Anmelden zum Antworten