Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TidTCPClient + ReadLn = hängt Programm auf (https://www.delphipraxis.net/70790-tidtcpclient-readln-%3D-haengt-programm-auf.html)

thetrue 4. Jun 2006 21:25


TidTCPClient + ReadLn = hängt Programm auf
 
moin,

wenn ich mit einem Timer(100), text mittels ReadLn('', 5) abfragen will, wird mein Programm blockiert/aufgehängt

wie kann man das ändern?

guste 4. Jun 2006 23:51

Re: TidTCPClient + ReadLn = hängt Programm auf
 
indem man herausfindet wo sich das Programm aufhängt ;-)

Ich dachte zuerst an ein Problem bei ATerminator = '', jedoch macht das nichts weil ReadLine das bereits abfängt.

Delphi-Quellcode:
  // User may pass '' if they need to pass arguments beyond the first.
  if Length(ATerminator) = 0 then begin
    ATerminator := LF;
  end;
Ich würde also einfach mal mit durch den Indy Quellcode steppen und schauen was passiert.

thetrue 5. Jun 2006 00:05

Re: TidTCPClient + ReadLn = hängt Programm auf
 
nja, das hilft mir nicht weiter

guste 5. Jun 2006 00:28

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Setze einen Haltepunkt vor ReadLine und steppe mit F7 durch den Quellcode bis Dein Programm hängt. Untersuche danach die Zeile(n) die unmittelbar davor verarbeitet wurde(n).

thetrue 5. Jun 2006 02:28

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Delphi-Quellcode:
procedure Tfrm_main.Timer2Timer(Sender: TObject);
begin
if server.Connected then
  begin
  tmptxt := server.ReadLn(':cmd\*\'); //<-- das ist der auslöser, es passiert nur dann was, wenn inhalt an kommt ;)
  timer1.Enabled := true;
  end;
end;
wie kann man das ändern?

jfheins 5. Jun 2006 11:28

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Probiers mal mit nem Thread ;)

thetrue 5. Jun 2006 12:10

Re: TidTCPClient + ReadLn = hängt Programm auf
 
wie?
ich weis nicht wie man threads bei TidCTCPlient benutzt

jfheins 5. Jun 2006 12:15

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Naja ... das ReadLn in nen Thread verlagern und wenn was da ist, mit synchonize() ein Event auslösen ...

thetrue 5. Jun 2006 12:17

Re: TidTCPClient + ReadLn = hängt Programm auf
 
und wie macht man das?

guste 5. Jun 2006 15:03

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Ich weiß nicht was jetzt ein Thread da noch soll. Mir stellt sich die Frage ob das Client-Server-Prinzip hier überhaupt richtig angewendet wird. Die paar Brocken, die von thetrue geschrieben wurden deuten darauf hin, daß der Server sendet sobald ein Verbindung zum Client besteht. Ich könnte ich mir sowas vorstellen wenn der Server alle Client über irgendwas informieren will. Der normale Weg wäre allerdings, daß der Client den Server etwas fragt und der Server entsprechend antwortet. Oder anders: der Client sendet ein Kommando und der Server "serviert" das Ergebnis. Was genau gemacht werden soll ist mir aber nicht bekannt, da sollte thetrue nachlegen.

Des Weiteren werden Daten die per WriteLn am Server verschickt werden mit LF ($0A) abgeschlossen (terminiert). thetrue stellt als Terminator aber ':cmd\*\' ein. Absicht???

In meiner ersten Antwort hatte ich angeregt per Debugger in den Indy Quellcode zu springen. Was ist daraus geworden? Die Aussage der Fehler tritt bei ReadLn auf ist mir zu einfach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz