Threads kontrolliert beenden
-
Was ist die bombensichere Lösung zum kontrollierten herunterfahren von Threads?
Ich habe gerade folgendes Prinzip:
in der Threadfunktion:{ while (WaitForSingleObject(link->hEventEndThread,0) != WAIT_OBJECT_0) { //arbeiten... } //aufraeumen... }und um den Thread runterzufahren:
SetEvent(hEventEndThread); if (hTalkerThread!=NULL) { WaitForSingleObject(hTalkerThread, INFINITE); hTalkerThread = NULL; }bloss manchmal hängt er beim WaitForSingleObject beim runterfahren.
ich versteh nich warum.
-
Woher kommt das Thread-Handle? Warum verzichtest Du auf das Löschen des Handles (nicht des Threads!)?
-
hat sich erledigt.
Problem kam daher dass der Thread sich in bestimmten Situation selbst beendet. Dann noch eine falsch plazierte CriticalSection => Deadlock.
-
scrontch schrieb:
Problem kam daher dass der Thread sich in bestimmten Situation selbst beendet.
Wenn das ein Problem ist, öffnest Du den Thread falsch, denn das darf auf gar keinen Fall etwas ausmachen! Verwende nicht _beginthread, verwende _beginthreadex. Und schliesse das Thread-Handle, das fehlt bei Dir noch immer.