AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy ReadLn - TimeOut funzt nicht

Indy ReadLn - TimeOut funzt nicht

Offene Frage von "smudo"
Ein Thema von smudo · begonnen am 22. Dez 2005 · letzter Beitrag vom 27. Dez 2005
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

Indy ReadLn - TimeOut funzt nicht

  Alt 22. Dez 2005, 10:05
Hallo ,

ich hatte hier schon mal mein Problem geäußert.

Ich lese mit ReadLn die Zeilen aus, welcher mir der Server nach einer gewissen Zeit bereitstellt. Vom Zeitverhalten konnte ich das ganze so umbauen, dass es bis zum Empfang der 1. Zeile nicht länger als 300 Sekunden dauert.
ReadLn wartet also so lange, bis die erwartete Zeile eingetroffen ist.
Um das zeitlich zu begrenzen, gibt es ja die Möglichkeit der Übergabe eines Timeoutwertes.
Das wollte ich hiermit mal testen:
Delphi-Quellcode:
c:=GetTickCount;
s:=ReadLn(#10,1);
ShowMessage(IntToStr(GettickCount-c)+': '+s);
Ich bin mir jetzt nicht sicher, ob es sich bei dem TimeOut um Millisekunden oder Sekunden handelt, auf jeden Fall dürfte es doch wohl nicht möglich sein, dass c den Wert 5547 annimmt. Macht er aber

Was muss ich anders machen?

Danke im Voraus

René
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Indy ReadLn - TimeOut funzt nicht

  Alt 22. Dez 2005, 17:15
Hi,
ich sehe irgendwie nicht ganz dein Problem.
Die Eigenschaft ReadTimeOut gibt die Zeit in Milisekunden an, die vergehen darf, bis eine Verbindung steht (von der dann Daten kommen). Wie schnell nun aber ein Datum übertragen wird, interessiert Indy nicht. Wenn du also versuchst den Server zu erreichen, darf dies nur TimeOut ms dauern, sonst fliegt eine Exception.
Beim Lesen kann es halt dauern (Protokoll bedingt) bis der fertig ist.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Indy ReadLn - TimeOut funzt nicht

  Alt 22. Dez 2005, 17:18
Hallo

es geht doch hier um ReadLn. Wenn ich ReadLn sage, es darf maximal x Millisekunden warten, dann soll er doch bitte mit einer Exception aussteigen, wenn die Zeit verstrichen ist und noch nichts ankam. Bei mir bleibt Readln aber in der wartenden Position bis ich den Prozess beende.

René
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Indy ReadLn - TimeOut funzt nicht

  Alt 22. Dez 2005, 18:28
Nun ja, es geht zwar um Readln, aber eben immer noch um das gleiche TimeOut. Wenn du versuchst etwas zu lesen (Readln), dann wird eine Verbindung zum Server (der Gegenstelle) aufgebaut. Mit dem zweiten Argument (TimeOut) setzt du nur die Dauer in ms, die vergehen darf, bis diese Verbindung hergestellt ist.
Möchtest du für eine bestimmte Operation mehr / weniger Zeit zum Aufbau dieser Verbindung lassen, kannst du das halt an dieser Stelle tun, sonst wird der global gesetzte Wert verwendet.

Ist halt Indy Logik, aber wie lange jetzt das eigentliche Lesen einer Zeile dauert ist und bleibt egal. Du empfängst etwas, wertest es aus (suchst nach #10), allozierst Speicher (Rückgabestring), wandelst das Empfangene in einen String... Schon allein das alles kostet dich ein paar Ticks (die schon mal in der gemessenen Zeit stecken).
Dann kommt noch dazu, dass wenn du mehr als ein Zeichen empfängst, jedes Zeichen empfangen werden muss. Wie viele Packete dass dann sind kannst du wohl eher nicht festlegen, somit auch nicht die Zeit die für das verschicken von einem Packet nötig ist. Zwischen dem Senden zweier Packete darf dann auch noch eine Zeit liegen. Und dann wäre da noch ein Acknowledgment oder eben nicht (bei TCP), das alles misst du halt mit und es hat letztlich nichts mit dem Timeout zu tun (dieses würde nie verletzt werden).

Also weiß ich nicht, warum du einen anderen Wert erwartest (schon garnicht was für einen)
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Indy ReadLn - TimeOut funzt nicht

  Alt 27. Dez 2005, 18:58
Jetzt für mich nochmal ganz langsam...

Ich sende mit Writeln einen Befehl an einen entfernten Datenbankserver.
Im Anschluss warte ich mit ReadLn auf eine Antwort.
Es vergeht je nach Komplexität der Abfrage eine gewisse Zeit.
Anschließend empfängt ReadLn eine Datenzeile und das Programm wird fortgesetzt.
Sollte aus irgendwelchen Gründen die Zeile nicht gesendet werden (und das kam schon vor),
wartet ReadLn bis zum Sankt-Nimmerleins-Tag.

Deshalb möchte ich dem ReadLn einen TimeOut-Wert mitgeben, welcher bei normaler Kommunikation nicht überschritten werden dürfte, aber im Falle des Ausbleibens der Zeile wenigsten nach dieser Zeit zum Abbruch führt.

Übrigens, wenn ich den Wert ReadTimeOut setze, funktioniert das auch genau wie beschrieben.
Übergebe ich diesen Wert aber dem ReadLn, wird er schlichtweg ignoriert.
Warum?

So, jetze wünsch ich aber wenigstens mal noch einen guten Rutsch!

René
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:48 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