Zitat von
gore:
Danke Michael!
Also für alle Threads TerminateThread() und dann gleich List:=nil und DeleteCriticalSection(LockList).
Und was ist wenn ein Thread gerade in einer CriticalSection ist? Gibt es da keine Probleme?
Da müsste man mal gucken, was passiert. Aber nehmen wir mal an, du öffnest in der CriticalSection eine Datei und schließt sie wieder vor dem verlassen. Schiesst du den Thread jetzt mittendrin ab, müsste das Dateihandle bei Beendigung des Prozesses geschlossen werden von Windows. Rein theoretisch würden jetzt alle anderen Threads darauf warten, dass die CriticalSection verlassen wird. da du aber auch alle anderen Threads abschieest, du willst ja den Prozess beenden, dürfte das auch keine Rolle spielen. Allerdings, schön ist es nicht. Es ist immer besser, wenn sich Threads selber kontrolliert beenden können, in dem du ihnen sagst, sie sollen sich beenden:
Delphi-Quellcode:
while not Terminated do
begin
...;
...;
end;
Zitat:
BTW: Bei einem anderen Programm habe ich das Problem, dass beim Aufruf von DeleteCriticalSection das Programm einfach weg ist (als ob ich "halt;" aufrufe bzw. wie ein Absturz ohne Fehlermeldung). Woran kann das liegen?
Löscht du eventuell eine ungültige CriticalSection? Kannst du das irgendwie debuggen, um zu gucken, was da passiert?