Einzelnen Beitrag anzeigen

karma

Registriert seit: 14. Mai 2008
27 Beiträge
 
#1

Probleme mit Indy FTP in eigenem Thread

  Alt 20. Feb 2009, 19:42
Hallo Leute,
ich hoffe ich bin im richtigen Forum für meine Frage.
Ich habe folgendes Problem: Ich habe in meinem Programm den FTP Client in einen eigenen Thread ausgelagert, damit mein Form nicht hängt während er aktiv ist. Das funktioniert auch prima, allerdings wartet das Programm, wenn ich es beenden möchte, darauf, dass z.B. eine laufende Dateiübertragung fertiggestellt ist. Ich möchte aber, dass beim beenden eventuell laufende Übertragungen abgebrochen werden und sich das Programm sofort beendet.


Außerdem noch zwei andere Dinge: Im Programm gibt es einen Button, der den Download startet. Nach Fertigstellung soll dann ein Windows-Explorerfenster mit dem Download geöffnet. Ich habe das jetzt mit einer Schleife gemacht, die folgendermaßen aussieht:

 while(not ftpload.terminated) do application.ProcessMessages; Danach kommt dann der Aufruf zum Öffnen des Explorers. Vielleicht als kurzen Hinweis dazu, der Thread zerstört sich nicht selbst, und die boolvariable terminated setze ich im OnTerminate des Threads. Das funktioniert an sich, unschönerweise bewirkt die Schleife aber eine 100% CPU Auslastung. Ich dachte immer, Windows blockiert den Messageloop immer automatisch, damit das nicht passiert?
Ich kann den Explorer-Aufruf leider nicht aus dem Thread machen, weil ich zusätzlich dazu nach dem Download auch noch einen Eintrag in eine Datenbank machen muss. Und ich weiß nicht, ob ich auf eine ZEOS-Connection aus 2 Threads gleichzeitig zugreifen darf.


Zweites Problem ist, man könnte jetzt ja theoretisch ein weiteres Mal auf den Button klicken. Wenn der Thread jetzt noch läuft, soll ein Hinweis kommen, in dem man auswählen kann ob man den Thread beenden möchte, oder ob er weiterlaufen soll. Dazu ist ein MessageDlg drin, der beim Klicken auf Ja die terminate-Prozedur meiner TThread-Klasse aufruft. Leider beendet das aber den Thread nicht x) Ich schätze, hier ist das das gleiche Problem wie wenn man das gesamte Programm beenden möchte. Indy scheint den Thread so zu blockieren, dass er auf nichts anderes mehr reagiert.

Wie kann ich das Problem lösen? Vielen Dank für eure Hilfe!
  Mit Zitat antworten Zitat