Fragen
1) Wenn ich das Terminate in die Procedure UpdateError reinpacke, worauf bezieht sich dann das Self? Immernoch auf den Thread oder auf den Thread des Hauptformulars? Weil durch Synchronize wird ja die Funktion im Hauptthread ausgeführt, oder?
Ja, wird im Hauptthread ausgeführt, aber Self bezieht sich immer auf die aktuelle Objektinstanz, also auf den Thread.
Zitat:
2) Ich habe festgestellt, dass der SubThread wartet, bis die Procedure UpdateError vollständig ausgeführt wurde. D.h. bis mein MessageDlg bestätigt wurde. Kann man das umgehen? Also der Thread soll dann einfach "auslaufen", sich beenden. Er hat seine Arbeit getan, er soll halt nur noch den MessageDlg anzeigen und gut ist.
Dann ist MessageDlg das falsche. Denn das wird afaik immer modal angezeigt. Du könntest auch eine Message an das Hauptformulat senden, und danach beenden. der Hauptthread zeigt dann die Dialogbox an.
Zitat:
Momentan ist es so, dass sich das Programm vollständig aufhängt sobald ich auf Ja klicke.
Ich kann 20x auf Nein klicken und dann auf Ja und es friert vollständig ein.
Verständlich. Denn wenn die Box angezeigt wird, ist der Thread noch nicht beendet. Und dann wird wieder StartThread aufgerufen (wohlgemerkt, der Thread ist wegen synchronize angehalten, ist aber noch aktiv.) und der Thread soll terminiert werden. Der antwortet aber nicht, weil er auf die Beendigung von StartThread wartet.
Klassischer Deadlock