ReadDirectoryChangesW: wie sauber beenden?
-
Was ist an TerminateThread() unsauber ??
-
XBert schrieb:
Was ist an TerminateThread() unsauber ??
Weil es den entsprechenden Thread abschießt, ohne ihm irgendeine Chance für Aufräumarbeiten zu bieten (da sind potentieelle Speicherlecks wohl dein kleinstes Problem) - sowas macht man nur, wenn alle anderen Möglichkeiten gescheitert sind.
-
Hallo!
Danke für die fixen antworten :).
@XBert: Just 4 fun hatte ich davor das mal so gemacht, habe das Handle von _beginthread() an Terminate Thread übergeben, lustigerweise hat sich der Prozess immer noch nicht beendet :D. Abgesehen davon möchte ich schon sauber bleiben :).
@Martin: Ja, ich hatte es erst overlapped mit der completion-port-Methode, allerdings hatte ich den Eindruck, dass bei vielen Dateioperationen hier einige Nachrichten verschluckt werden. Das war sicherlich ein Programmierfehler meinerseits. Ich werds dann mal wieder so machen und nach dem Fehler suchen, wenn ich nicht damit zurechtkomme meld ich mich wieder
.MfG
-
@ CStoll:
danke ich habs auch gerade in einem andern Beitrag gelesen (wusst ich ned)
-
Ich bin zwar kein WinAPI-Experte, aber sollte es nicht reichen, ein Event zu erstellen, welches ausgelöst wird, wenn der Thread beendet werden soll?
Man kann dann mittels WaitForMultipleObjects auf Änderungen am Filesystem und auf den Event warten.
-
Wenn dein Programm sich eh beendet, sind irgendwelche Speicherlecks auch egal, weil der Speicher deines Prozesses dann eh freigegeben wird vom Betriebssystem. Und da du keine kritischen Funktionen verwendest, ist TerminateThread an dieser Stelle nicht so fatal, wie einige es darstellen.
-
Joe_M. schrieb:
Ich bin zwar kein WinAPI-Experte, aber sollte es nicht reichen, ein Event zu erstellen, welches ausgelöst wird, wenn der Thread beendet werden soll?
Man kann dann mittels WaitForMultipleObjects auf Änderungen am Filesystem und auf den Event warten.Ja so hätte ich es auch gemacht.
-
SkriptProfessor schrieb:
Wenn dein Programm sich eh beendet, sind irgendwelche Speicherlecks auch egal
Mit der Einstellung kannst du eventuell an kleine Fun-Anwendungen herangehen - in "echten" Anwendungen ist sowas tödlich (btw, Speicher ist nicht das einzige, was bei so einem erzwungenen Absturz zurückbleibt).
-
SkriptProfessor schrieb:
Wenn dein Programm sich eh beendet, sind irgendwelche Speicherlecks auch egal, weil der Speicher deines Prozesses dann eh freigegeben wird vom Betriebssystem. Und da du keine kritischen Funktionen verwendest, ist TerminateThread an dieser Stelle nicht so fatal, wie einige es darstellen.
Dann ist TerminateThread immer noch schlechter, als den Prozess zu beenden. Wen man TerminateThread aufruft und der Thread gerade eine CRT Ressource verwendet läuft nicht einmal mehr das beenden des Programmes.
Dann lieber einfach den Thread, Thread sein lassen und das Programm verlassen, das ist immer noch sauberer als TerminateThread zu verwenden.
-
Nagut da hast du Recht Martin.