thread beenden
-
hola leute
wie kann ich einen thread beenden ohne TerminateThread zu verwenden ? gibts dazu eine funktion ? oder muss ich das irgendwie mit ner variablen machen ? dann musste ich wahrscheinlich alle gewisse zeit nachgucken, ob sie sich geaendert hat. scheint mir jedoch nicht sehr effektiv zu sein.
wenn ich TerminateThread verwende, hab ich ja keine moeglichkeit mehr, allokierten speicher wieder frei zugeben. oder hab ich da was missverstanden ?cermy
Meep Meep
-
Pseudocode:
function Thread while not Terminated do {Schleifenrumpf} end;Wird jetzt die gloable Variable Terminted auf True gesetzt, am besten mit InterlockExchange o.ä. wird die Schleife abgebrochen und der Thread beendet sich quasi selber.
-
hola
hab ich befuerchtet, das man das so machen muss. aber wie sieht das dann aus, wenn ich ein WaitForSingleObject im thread habe ? da is der thread ja dann blockiert. wie komme ich da dann wieder raus ?
Meep Meep
-
Wieso? Wenn der Thraed die Schleife verlassen hat und am Ende der Thread-Funktion angekommen ist beendet er sich und wechslet wie beim normalen Beenden in den signalisierten Zustand.
-
re
noe, das mein ich anders
/* Thread Func */ ... DWORD result = WaitForSingleObject(ein_event_handle, INFINITE); // (1) ...der thread wartet in (1) schoen brav auf das event. kommt aber nix. nun will ich das programm beenden, weil ich den rehcner ausschalten muss, weil ich gitterbettsperre habe. ich kann aber das event nicht auf signal stellen, weil es vom system kommt. wie kann ich nun den thread beenden ?
Meep Meep
-
Du musst dann WaitForMultipleObjects (ich glaub das hiess so) benutzen. Für die Beendigung des Threads nimmst du dann ebenfalls so ein signalisiertes Objekt, zB Event. Das packst du zusammen mit ein_event_handle in ein Array und übergibst das WaitForMultipleObjects. IIRC bekommst du über die Funktion auch mitgeteilt, welches Objekt signalisiert wurde.