AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TidTCPClient + ReadLn = hängt Programm auf
Thema durchsuchen
Ansicht
Themen-Optionen

TidTCPClient + ReadLn = hängt Programm auf

Ein Thema von thetrue · begonnen am 4. Jun 2006 · letzter Beitrag vom 10. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von thetrue
thetrue

Registriert seit: 27. Mai 2006
65 Beiträge
 
#1

TidTCPClient + ReadLn = hängt Programm auf

  Alt 4. Jun 2006, 21:25
moin,

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

wie kann man das ändern?
  Mit Zitat antworten Zitat
guste

Registriert seit: 23. Apr 2006
19 Beiträge
 
#2

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 4. Jun 2006, 23:51
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.
guste
  Mit Zitat antworten Zitat
Benutzerbild von thetrue
thetrue

Registriert seit: 27. Mai 2006
65 Beiträge
 
#3

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 00:05
nja, das hilft mir nicht weiter
  Mit Zitat antworten Zitat
guste

Registriert seit: 23. Apr 2006
19 Beiträge
 
#4

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 00:28
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).
guste
  Mit Zitat antworten Zitat
Benutzerbild von thetrue
thetrue

Registriert seit: 27. Mai 2006
65 Beiträge
 
#5

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 02:28
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?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 11:28
Probiers mal mit nem Thread
  Mit Zitat antworten Zitat
Benutzerbild von thetrue
thetrue

Registriert seit: 27. Mai 2006
65 Beiträge
 
#7

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 12:10
wie?
ich weis nicht wie man threads bei TidCTCPlient benutzt
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 12:15
Naja ... das ReadLn in nen Thread verlagern und wenn was da ist, mit synchonize() ein Event auslösen ...
  Mit Zitat antworten Zitat
Benutzerbild von thetrue
thetrue

Registriert seit: 27. Mai 2006
65 Beiträge
 
#9

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 12:17
und wie macht man das?
  Mit Zitat antworten Zitat
guste

Registriert seit: 23. Apr 2006
19 Beiträge
 
#10

Re: TidTCPClient + ReadLn = hängt Programm auf

  Alt 5. Jun 2006, 15:03
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.
guste
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:53 Uhr.
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