Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Threads + CriticalSection bei FormClose schnell freigebe

  Alt 3. Apr 2008, 13:32
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat