Ich verwende einen Thread, der diverse Anzeigen im Hauptformular via Synchronize ausführt.
Beim Beenden im OnCloseQuery-Ereignis des Hauptformulars rufe ich folgendes auf:
Th.Terminate;
Th.WaitFor;
Manchmal hängt das Hauptprogramm nun an Th.WaitFor fest. Mit Hilfe des Debuggers habe ich herausgefunden, daß mein Thread in SendMessage hängt, also im Aufruf von Synchronize. Es scheint sich hier um einen klassischen Deadlock zu handeln, Der Thread wartet in Synchronize, daß er in die Botschaftsschleife des Hauptprogramms eintreten kann, Das Hauptprogramm wartet in der Botschaftsschleife auf die Beendigung des Threads.
Ich habe auch schon die Methode Synchronize derart überschrieben, daß das ererbte Synchronize nur aufgerufen wird, wenn Terminated false ist, aber ohne Erfolg, der Deadlock bleibt.
Wie kann man sowas verhindern?
Andreas Richter
Beim Beenden im OnCloseQuery-Ereignis des Hauptformulars rufe ich folgendes auf:
Th.Terminate;
Th.WaitFor;
Manchmal hängt das Hauptprogramm nun an Th.WaitFor fest. Mit Hilfe des Debuggers habe ich herausgefunden, daß mein Thread in SendMessage hängt, also im Aufruf von Synchronize. Es scheint sich hier um einen klassischen Deadlock zu handeln, Der Thread wartet in Synchronize, daß er in die Botschaftsschleife des Hauptprogramms eintreten kann, Das Hauptprogramm wartet in der Botschaftsschleife auf die Beendigung des Threads.
Ich habe auch schon die Methode Synchronize derart überschrieben, daß das ererbte Synchronize nur aufgerufen wird, wenn Terminated false ist, aber ohne Erfolg, der Deadlock bleibt.
Wie kann man sowas verhindern?
Andreas Richter
Comment