Einzelnen Beitrag anzeigen

rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#1

TidTCPCLient erzeugt Stack-Overflow

  Alt 28. Okt 2014, 14:42
Hallo Zusammen!

Mein Programm muß einen, über TCP/IP (IPv4) angeschlossenen, Barcode-Scanner auslesen. Der Scanner befindet sich im lokalen Netzwerk.

Ich verwende einen Timer, um aus einem TIdTCPClient mit TidTCPClient.IOHandler.ReadLn den vom Barcode-Scanner gelesene Wert herauszubekommen. Den gelesenen Wert übertrage ich laufend in einen String. Ist der String <> '' schreibe ich ihn in eine Memo, leere die Variable und es geht von vorne los. Später soll der gelesene Wert dazu dienen, weitere Daten heraus zu suchen.

Im Coding sieht die Schleife so aus:

Delphi-Quellcode:
procedure TfrmMain.timScanTimer(Sender: TObject);
begin
   tag := 5;
   Inc(intLine);               // Durchläufe zählen
   Label1.Caption      := IntToStr(intLine);   // Durchläufe anzeigen
   Application.ProcessMessages;
   
   strLine      := tcpClient.IOHandler.ReadLn;   // Inhalt nach Zwischenvariable
   
   tcpClient.Disconnect;            // Client abschalten
   timScan.Enabled      := false;      // Timer anhalten
   
   if strLine <> 'then begin         // ein Barcode wurde erkannt
      memLog.Lines.Add(TimeToStr(now()) + strLine);   // Barcode in Memo schreiben
      strLine         := '';      // Zwischenvariable leeren
   end;
   
   timScan.Enabled      := true;      // Timer wieder starten
   tcpClient.Connect;            // und Client wieder anschalten
end;
Das funktioniert soweit auch. Aber: Nach ca. 20 - 30 Minuten steigt das Programm aus und meldet einen Stack-Overflow. (Access violation at xxx: write of adress xxx.) Mittlerweile habe ich im Prinzip nur noch diese Timer Prozedur im Programm. Alles drum herum habe ich entfernt, um auszuschließen, dass das Verhalten aus anderen Bereichen herrührt.

Kann mir jemand helfen, und mir sagen, was ich hier falsch mache?

Vielen Dank
Rolf
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat