![]() |
Indy Übertragung -> Programm reagiert nicht
Hey,
ich benutz zwar den Borland C++Builder, aber da ist so gut wie alles gleich ;) Deshalb wollt ich fragen, wie ich mein Programm wärend einer Übertragung von Indy TCP Server zum Indy TCP Client "weiterlaufen" lassen kann. Also zZ. ist es so das bei der Übertragung das Programm nicht reagiert (Fenster nicht verschieben, usw...). Gibt es da einen Trick ? Ich habe eine Fernsteuerung geschrieben mit Client und Server und da sollte so etwas nicht auftreten. just, t0b4d |
Re: Indy Übertragung -> Programm reagiert nicht
Moin t0b4d,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Dazu fallen mir zwei Lösungsansätze ein:
|
Re: Indy Übertragung -> Programm reagiert nicht
Hey Christian,
danke für die informative Antwort aber das mit der TidAntiFreeze Komponente hat bei mir auch nicht geholfen. Dein anderer Lösunsvorschlag hört sich sehr kompliziert an ?! ;) Bin deshalb die Indy Komponenten durchgegangen und hab einmal den IdThreadMgrDefault und einmal den IdThreadMgrPool gefunden. Ich weis jetzt gar nicht ob Du das gemeint hast! Wär nett wenn Du mir das vlt. bissel genauer erklären, oder mich auf ein Tutorial weiterleiten würdest Ich will auch keine Lösung die ich einfach abtippen kann ;) ich will das Problem und die Lösung verstehen - nur so lern ich was :) just, t0b4d |
Re: Indy Übertragung -> Programm reagiert nicht
Er meinte wohl einen richtigen Thread.
Eine "normale" Delphianwendung hat nur einen Thread. Es kann also nur immer einwas gleichzeitig gemacht werden (also entweder Daten übertragen oder Formular verschieben). Wenn du jetzt also einen neuen Thread anlegst und darin die Übertragung statt findet kann der Hauptthread auch weiterhin das verschieben des Formulars etc. zulassen. |
Re: Indy Übertragung -> Programm reagiert nicht
Moin t0b4d,
zum Thema Thread solltest Du hier einiges unter dem Begriff ![]() Vor kurzem hatte ich dazu gerade mal einen kurzen Democode gepostet. Auch wenn sich die Beispiele auf Delphi beziehen, dürfte die Umsetzung mit dem C++ Builder möglich sein. |
Re: Indy Übertragung -> Programm reagiert nicht
kann ich mir das ganze dann so vorstellen, dass ich auf dem einen Thread eine große Datei übertrage und auf einem anderen Thread gleichzeitig was empfange ??
|
Re: Indy Übertragung -> Programm reagiert nicht
Ein weiterer Lösungsvorschlag: Application.ProcessMessages in der OnWork-Passage des TIdFTP ;)
So hats bei mir jedenfalls geklappt. |
Re: Indy Übertragung -> Programm reagiert nicht
Application.ProcessMessages ist ja eigentlich das gleiche was auch IdAntiFreeze macht bzw. umgekehrt.
Von den beiden Lösungen kann ich also nicht wirklich profitieren. Christian Seehase gab mir den Tip mit der Transfer Verlagerung in einen eigenen Thread. Das hab ich jetzt schon häufiger gelesen, und hab mir deshalb dieses Beispiel durchgelesen: ![]() Jetzt würd ich gerne wissen ob ich die Indy Komponente zB TCPClient in dem Thread selbst anlegen soll oder wie bisher in dem Form1. Edit: mein Thread Objekt sieht zZ so aus (von einem FTP test Client):
Delphi-Quellcode:
__fastcall TTransferThread::TTransferThread(String ip,String user,String pw,String filepath) : TThread(false)
{ Form1->FTP->Username = user; Form1->FTP->Password = pw; Form1->FTP->Host = ip; file = filepath; FreeOnTerminate = true; //Aufruf von TThread::Terminate() gibt Thread frei. } //--------------------------------------------------------------------------- void __fastcall TTransferThread::Execute() { Form1->FTP->Connect(true,4000); Form1->FTP->Put(file,ExtractFileName(file)); } //--------------------------------------------------------------------------- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 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