AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EOutPutBufferTooSmall- Async Pro

Ein Thema von EConvertError · begonnen am 25. Apr 2004 · letzter Beitrag vom 7. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#1

EOutPutBufferTooSmall- Async Pro

  Alt 25. Apr 2004, 15:49
Hallo!

Hier bin ich wieder einmal wieder mit meinen Async Pro Problemen.
Ich bekomme nämlich immer, wenn ich eine etwas längere Datei senden will, eine EOutPutBufferTooSmall Exception mit der Meldung "OutPutBuffer too small for block".

Der Code:
Delphi-Quellcode:
  try
    ApdComPort.Open:= TRUE;
    for I:= 0 to Txt.Count-1 do begin
      ApdComPort.Output:= Txt[I]+#10#13; //Send Txt
    end;
  finally
    ApdComPort.Open:= FALSE;
  end;
Txt ist vom Typ TStrings und ist der Inhalt eines Memos. Bei nicht so langen Dateien funktioniert das ganze auch gut, nur eben bei längeren Textdateien bekomme ich Schwierigkeiten.

Was passt denn da jetzt nicht? Welchen Buffer muss ich da größer stellen? Und vor allem auf welche Größe?

Vielen Dank für eure Hilfe,
Andy
Andreas N.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#2

Re: EOutPutBufferTooSmall- Async Pro

  Alt 27. Apr 2004, 19:00
Weiß denn wirklich niemand eine Lösung?
Andreas N.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: EOutPutBufferTooSmall- Async Pro

  Alt 27. Apr 2004, 20:26
Zitat von EConvertError:
Weiß denn wirklich niemand eine Lösung?
Nein, keiner. Weil : wie oder was machst Du denn da überhaupt ? Wie hoch ist der Puffer eingestellt (Input und Output) ? Ist irgendeine Flow-Control eingeschaltet ? Vermute mal nicht. Dann schraube den Puffer eben noch höher, bis eine Datei doch ein Byte zuviel hat. Wenn Du weißt, was ich meine. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#4

Re: EOutPutBufferTooSmall- Async Pro

  Alt 28. Apr 2004, 17:56
Also dann werde ich jetzt ein paar genauere Informationen bekanntgeben.

Was ich überhaupt machen will? Einfach nur Textdateien jeder Größe über den COM Port senden und empfangen.

Ja also die property Insize (output buffer) ist 4096 (default). In der Hilfe wird dieser Wert empfohlen. Flowcontrol ist keine eingeschaltet.

Ist es denn eine gute Idee einfach den Puffer größer zu stellen? Oder sollte man nicht irgendwie warten, bis er leer ist? Oder ist vielleicht beides möglich?

mfg,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: EOutPutBufferTooSmall- Async Pro

  Alt 28. Apr 2004, 18:06
Zitat von EConvertError:
...Ist es denn eine gute Idee einfach den Puffer größer zu stellen? Oder sollte man nicht irgendwie warten, bis er leer ist?
Natürlich ist das keine gute Idee. Was ist denn mit OutSize ?? Ich würde auf jeden Fall SW/HW Handshake benutzen.

Edit : Sehe gerade den Titel des Threads, tja dann schau mal nach. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#6

Re: EOutPutBufferTooSmall- Async Pro

  Alt 28. Apr 2004, 18:22
Oh, ich bitte vielmals um Entschuldigung, ich habe mich verschrieben. Ich habe Outsize (nicht Insize) gemeint. Der Rest stimmt, also der Wert ist 4096.

Leider kann ich mir das mit dem Handshake nicht aussuchen. Der Benutzer kann entscheiden, ob er das will oder nicht.

Also ist es keine gute Idee einfach Outsize größer zu stellen? Wie soll ich denn warten, bis wieder Platz im Buffer ist?

Oder hat sich das mit der schlechten Idee auf das Verstellen von Insize bezogen?

mfg,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: EOutPutBufferTooSmall- Async Pro

  Alt 28. Apr 2004, 18:29
Du mußt noch einiges darüber nachlesen. Was du machst ist, den Wasserhahn aufzudrehen ohne darauf zu achten, ob noch Platz im Faß ist und läßt alles überlaufen. Das Faß muß dem Wasserhahn sagen : STOP !!! bis irgendeiner mit einem Eimer wieder Platz schafft. Dann sagt das Faß: mache weiter, bis es wieder fast voll ist und sagt wieder STOP ! Und der Wassertropfen, der Dein Faß eventuell zum überlaugen bringen könnte ist die Reserve und das ist das Insize/Outsize.
Gruß
Hansa
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#8

Re: EOutPutBufferTooSmall- Async Pro

  Alt 28. Apr 2004, 18:34
Wow, die Reaktionszeit ist genial. Das ist ja schon fast ein Chat hier.

Danke, das hast du gut erklärt, Hansa.

Wenn ich das richtig verstehe, dann habe ich 2 Möglichkeiten:
1) Ich erhöhe Outsize auf die Größe der Datei.
2) Ich warte bis der "Eimer" wieder Platz geschafft hat.

Welche der beiden ist denn nun besser?

mfg,
EConvertError
Andreas N.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: EOutPutBufferTooSmall- Async Pro

  Alt 28. Apr 2004, 19:21
1) wäre ein Faß ohne Boden, das nützt auf Dauer nichts.
2) der Eimer muß das Faß fragen, wieviel Platz es braucht, also wie lange das nächste mal der Hahn aufgedreht wird. Und der Eimer weiß dann, was zu tun ist. Ist er zu lahm, so muß das Faß dem Wasserhahn sagen, daß er sich schließen soll, so lange bis der Eimer fertig mit der Arbeit ist.

So, jetzt aber genug mit Wasser. Habe nachgeschaut :

Delphi-Quellcode:
const InBufSize = 8 * 1024;
      OutBufSize = 4 * 1024 + 50;
      HWHandshakeOptions = hfUseRTS or hfRequireCTS;
Wie du siehst wird das Faß bis zu maximal der Hälfte der verfügbaren Reserve gefüllt.
Gruß
Hansa
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#10

Re: EOutPutBufferTooSmall- Async Pro

  Alt 2. Mai 2004, 17:05
Danke noch einmal.

Also werde ich Nummer 2 machen. Also konkret mit Async Pro:
1) Zuerst überprüfe ich mittels "Length" die Größe des zusendenden Strings.
2) Und dann überprüfe ich mit "(ApdComPort.)OutBuffFree", ob Platz im Buffer ist.
3) Wenn ja, dann ist alles OK. Wenn nein, dann füge ich einen StatusTrigger hinzu ("AddStatusTrigger"), der mir meldet, wann wieder Platz ist.

Stimmt meine Denkweise jetzt?

Andy
Andreas N.
  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 08:31 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