thread beenden?
-
ich will nen nebenthread beenden:
aufruf:
hAcceptThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)RcvProc, NULL, NULL, NULL);beenden:
unsigned long tmp;
GetExitCodeThread(hAcceptThread, &tmp);
ExitThread(tmp);aber nun wird immer das ganze prog beendet!
-
Du solltest Threads nicht abschießen, sondern auslaufen lassen - sprich in der ThreadProc einfach returnen

-
aso
-
Moderator flenders, bitte erklär uns die Funktion und Benutzung von ExitThread().
-
ExitThread ist eine der Funktionen, die man in C++ niemals benutzen darf. Sie beendet den Thread auf der Stelle und kehrt nicht zurück.
Für den Compiler ist das allerdings eine ganz normale Funktion, deswegen werden beim Aufruf Stack- und threadlokale Objekte nicht korrekt abgebaut.
Auch in C ist das Benutzen von ExitThread AFAIK nicht in Ordnung, da threadlokaler Speicher der Standardlib nicht freigegeben wird. In C++ verursacht ExitThread aber auf jeden Fall fehlerhaftes Verhalten des Programms und sollte deswegen gemieden werden.
-
Einen Thread nie abschiesen. Ist er gerade in einer CriticalSection und ich schieße ihn ab, sind die Ressourcen immer noch gesperrt. Mache lieber so was:
while not Terminated do begin ...; ...; end; // aufräumenTerminated ist eine globale Variable, die du entsprechend mit den InterLockDingsbums-Funktionen setzt.
-
Merke: ExitThread != Thread abschießen
ExitThread beendet den gerade laufenden Thread, nicht irgendeinen.
Man darf allerdings nicht ExitThread verwenden, sondern _endthread, dann ist alles in Ordnung (Locks sollte man trotzdem vorher zurückgegeben haben).
pixartist: Kein Wunder, dass sich das Programm beendet, schließlich beendest du den main Thread.
-
Hatte ich da gerade etwas mit TerminateThread verwechselt?
