AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Form reagiert nicht während idftp1.get trotz application.processmessages
Thema durchsuchen
Ansicht
Themen-Optionen

Form reagiert nicht während idftp1.get trotz application.processmessages

Ein Thema von gee21 · begonnen am 12. Jul 2014 · letzter Beitrag vom 15. Jul 2014
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 13:28
Wenn du einen Thread baust, dann musst du den so bauen, dass der komplett autark laufen kann.
Wenn ein Thread autark ist, dann kann man diesen Thread auch n-fach parallel laufen lassen, ohne dass es zu Störungen kommt.

Ein Beispiel aus dem Leben:

Jedes Auto ist ein eigener Thread und jedes Auto kann völlig unabhängig voneinander fahren.

Wenn ich deine Umsetzung jetzt mal auf die Autos übertrage, dann hast du einen Motor (TIdFTP) und alle Autos benutzen diesen Motor. Irgendwie uncool
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 14:14
Ich danke euch allen für eure Hilfe und Geduld.

Jetzt funktioniert es
Robert
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 14:20
Generell empfiehlt es sich bei der Programmierung immer zu überlegen, wie das im realen Leben funktionieren würde.

Statt eine Datei per FTP zu laden stellen wir uns vor, wir wollen etwas besorgt haben. Eine Gurke (Datei) aus dem Supermarkt (FTP-Server). Da wir selber (GUI) gerade am telefonieren sind (Interaktion mit dem User) und den Teilnehmer nicht mit Geräuschlosigkeit verunsichern wollen (Anwendung reagiert nicht) schicken wir jemand Anderen (Thread) los.

Dieser Andere (Thread) braucht nun bevor er losgeht alle notwendigen Informationen um die Aufgabe zu erledigen:
  • Was soll besorgt werden? Eine Gurke (Datei foo.txt)
  • Wo soll das besorgt werden? Supermarkt gleich um die Ecke (ftp.foo.com)
  • Womit soll er kaufen? Mit Geld (Benutzername, Kennwort)
Diese Informationen schreibe ich ihm auf einen Zettel und gebe ihm den Zettel mit (man beachte, dass dieser Zettel nun ausserhalb des eigenen Zugriffs ist).

Irgendwann kommt derjenige dann wieder und hat, wenn nichts schief gelaufen ist, die Gurke (Datei) dabei.

Ab jetzt kann ich auf die Gurke (Datei) zugreifen.

Läuft etwas schief, dann kann ich auf die Gurke (Datei) natürlich nicht zugreifen:
  • Geld hat nicht ausgereicht (Zugangsdaten falsch)
  • Gurken waren aus (Datei nicht gefunden)
  • Der Supermarkt ist zur Zeit geschlossen (Server nicht gefunden)
  • ...

Weitere Betrachtungen:

Wenn ich über den aktuellen Zustand informiert werden möchte, dann muss der Andere (Thread) mich eben fortlaufend anrufen und mich informieren. Da ich aber am telefonieren und nicht unhöflich bin, nehme ich diesen Anruf nicht mitten im Satz an, sondern entschuldige mich kurz, nehme den Anruf und damit die Information an, und lege wieder auf (Synchronize).

Wenn ich schon sehr modern bin, dann lasse ich mir einfach eine SMS schicken und schaue mir wenn ich Zeit habe die Information an (Queue).

Meinen Gegenüber kann ich dann immer wieder über den Fortschritt unterrichten (Progressbar aktualisieren).

Abbruch des Auftrags:

Um den Auftrag abzubrechen, schicke ich dem Anderen (Thread) eine SMS (Event), dass ich die Gurke (Datei) nicht mehr benötige.
  • Ist er noch auf dem Weg dorthin, kehrt er einfach wieder zurück (vor der FTP-Verbindung)
  • Ist er schon im Supermarkt (Verbindung zum FTP-Server hergestellt, Datei wird geladen), dann einfach alles wieder weglegen und zurückkehren (Verbindung trennen und die bis jetzt geladenen Daten verwerfen)
  • Hat er die Gurke schon gekauft, dann die Gurke wegwerfen (Datei wieder löschen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 14. Jul 2014, 11:22
Ein Beispiel aus dem Leben:

Jedes Auto ist ein eigener Thread und jedes Auto kann völlig unabhängig voneinander fahren.
Schlechtes Beispiel...
Da stand einer noch nie im Stau!...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 14. Jul 2014, 13:40
Ein Beispiel aus dem Leben:

Jedes Auto ist ein eigener Thread und jedes Auto kann völlig unabhängig voneinander fahren.
Schlechtes Beispiel...
Da stand einer noch nie im Stau!...
Wieso kannst du im Stau nicht fahren? Hast du schon mal versucht im Stau einfach aufs Gas zu drücken? Das Auto bewegt sich, der Stau ist dem Auto erst mal völlig egal (oder woher kommen die ganzen Auffahrunfälle im Stau?)

Oder meinst du etwa nicht fahren dürfen bzw. nicht fahren sollen?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.164 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 15. Jul 2014, 13:03
[OT]Einfach den Standstreifen nehmen...[/OT]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#7

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 15. Jul 2014, 15:40
Es gab mal eine Werbung irgendeines Autoherstellers. Der wollte vermutlich darstellen wie gut man mit dieser übergroßen Karre durch den Stadtverkehr kommt. Jedefalls war die Kreuzung in der Quere dicht und da tauchte das Auto in die Staße ein, so als sei sie aus Wasser und kam auf der anderen Seite wieder hoch.
http://www.t-online.de/nachrichten/p...-menschen.html
So kommt man bestimmt auch ganz gut unter einem Stau vorbei.

In Delphi wähe das dann so ähnlich, als wenn man alle Schutzmaßnahmen umgeht und von hinten durch die Brust die Oberfläche aktualisiert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 15. Jul 2014, 16:29
Ich wollte eigentlich darauf hinaus, das der Thread (das Auto) unabhängig von allen anderen Dingen lauffähig sein sollte um tatsächlich sinnvoll benutzbar zu sein. Wäre ja echt dämlich, wenn ich mir mit meinem Nachbarn den Motor teilen müsste (engine-sharing). Den gleichen Motor ok, aber eben nicht den selben.

Alles andere sind Regeln an die man sich halten sollte, weil es sonst kracht oder eben schlechter funktioniert:
  • Zu viele fahrende - also aktive - Autos auf einer Straße ergeben einen Stau, zu viele aktive Download-Threads ergeben auch einen Stau.
  • Viele parkende Autos ergeben keinen Stau - genau wie viele wartende Threads, es könnte nur ein Platzproblem geben (Parkplatz voll / Speicher voll)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz