Einzelnen Beitrag anzeigen

Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Indy10: TIdIOHandler.ReadLn hängt Programm auf

  Alt 3. Aug 2010, 09:25
Hallo,

in einem eigenständigen Thread verwende ich eine Ableitung von TIdTCPClient.
Der Thread selbst durchläuft in seiner Execute Methode eine Schleife
Delphi-Quellcode:
procedure TClientReader.Execute;
var
LReadString : AnsiString;
begin
while not Terminated do
  begin
  sleep(10);
  try
    if Assigned(FClient)and Assigned(FClient.IOHandler)and FClient.Connected then
      try
        FClient.IOHandler.ReadTimeout:=1000;//Test
        LReadString:= FClient.IOHandler.ReadLn;//Hier hängt sich das Programm einfach auf
        if(Length(Trim(LReadString))>0)then
          begin
          if Assigned(FClient.ReaderEvent)then
            begin
            FClient.ReaderEvent(LReadString);
            end;
          end;
      except
        on e : EIdClosedSocket do SNLogger.Log('TClientReader.Execute:EIdClosedSocket:'+e.ClassType.ClassName+':'+e.message);
        on e : EIdReadTimeout do SNLogger.Log('TClientReader.Execute:EIdReadTimeout:'+e.ClassType.ClassName+':'+e.message);
        on e : EIdException do SNLogger.Log('TClientReader.Execute:EIdException:'+e.ClassType.ClassName+':'+e.message);
        on e : exception do SNLogger.Log('TClientReader.Execute:Exception:'+e.ClassType.ClassName+':'+e.message);
        end;
  except
    on e : exception do
      begin
      SNLogger.Log('TClientReader.Execute:'+e.ClassType.ClassName+':'+e.Message);
      exit;
      end;
    end;
  end;
An der markierten Stelle hängt sich das Programm einfach auf, wenn ich die Zeile auskommentier funktioniert es perfekt.
Es kommt keine Exception
Das Programm hängt sich auch nicht bei jedem Durchlauf auf, sondern erst nach einiger Zeit.
Ich habe wie ihr seht ein Timeout probiert, jedoch ohne Erfolg.
Jetzt ist mir eingefallen, dass TIdAntiFreeze für solche Fälle nützlich sein kann und ich hab eins auf das Formular der Unit gezogen, in der dieser Thread verwendet wird, allerdings auch ohne Erfolg.
Ich bin mir jetzt nicht sicher wie das TIdAntiFreeze arbeitet, ob ich das in diesem Fall woanders einfügen muss.

Habt Ihr eine Idee warum sich das Programm da aufhängt?
Es hängt sich auch nur unter Windows XP auf, unter Windows 7 hatte ich bisher keine Probleme.
Martin Weber
Ich bin ein Rüsselmops

Geändert von Angel4585 ( 3. Aug 2010 um 10:12 Uhr)
  Mit Zitat antworten Zitat