Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Übertragung -> Programm reagiert nicht (https://www.delphipraxis.net/89524-indy-uebertragung-programm-reagiert-nicht.html)

t0b4d 1. Apr 2007 19:32


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

Christian Seehase 1. Apr 2007 20:52

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:
  • Probiere es mal mit TidAntiFreeze.
    Das ist für solche Fälle gedacht, hat bei mir aber bislang (bei Verwendung von TidHTTP) nicht funktioniert.
  • Lagere die Verbindung in einen eigenen Thread aus.

t0b4d 2. Apr 2007 12:53

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

SirThornberry 2. Apr 2007 13:03

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.

Christian Seehase 2. Apr 2007 14:14

Re: Indy Übertragung -> Programm reagiert nicht
 
Moin t0b4d,

zum Thema Thread solltest Du hier einiges unter dem Begriff Hier im Forum suchenTThread finden können.
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.

t0b4d 2. Apr 2007 15:35

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 ??

Svenkan 3. Apr 2007 00:02

Re: Indy Übertragung -> Programm reagiert nicht
 
Ein weiterer Lösungsvorschlag: Application.ProcessMessages in der OnWork-Passage des TIdFTP ;)
So hats bei mir jedenfalls geklappt.

t0b4d 13. Apr 2007 14:08

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: http://bcb-tutorial.c-plusplus.de/Thread/artikel7.html

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