AGB  ·  Datenschutz  ·  Impressum  







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

Connection Closed Gracefully.

Ein Thema von RedShakal · begonnen am 21. Dez 2009 · letzter Beitrag vom 21. Dez 2009
 
RedShakal
(Gast)

n/a Beiträge
 
#6

Re: Connection Closed Gracefully.

  Alt 21. Dez 2009, 10:56
Zitat von Astat:
Zitat von RedShakal:
Das Problem ist doch noch nicht so gelöst wie ich dachte.
1. Das Problem mit dem Datumsseparator:
DateSeparator := '.'; 2. Das Problem mit dem mehrfachen Aufruf:
procedure TServer.IdTCPServer1Execute(AThread: TIdContext); Ist ein Serverthread, dieser wird auch mehrfach aufgerufen werden können.

Dh. Die Log-Schreiberei und Globalen Variablen müssen Threadsave sein, sonst knallts sowiso irgendwann.

Tip: Das Logging in eine Threadsave Funktion auslagern, und mit CriticalSections synchronisieren.

Delphi-Quellcode:
var
  _SyncLog: TRTLCriticalSection;

procedure LogWrite(const ALogfile, AMessage: string);
var
  f: TextFile;
begin
  EnterCriticalSection(_SyncLog);
  try
    AssignFile(f, ALogfile);
    try
      {$I-}
      if FileExists(ALogfile) then Append(f) else Rewrite(f);
      if IOResult <> 0 then Reset(f);
      {$I+}
      Writeln(f, AMessage);
    finally
      CloseFile(f);
    end;
  finally
    LeaveCriticalSection(_SyncLog);
  end;
end;

initialization
  InitializeCriticalSection(_SyncLog);
finalization
  DeleteCriticalSection(_SyncLog);
end.
lg. Astat

Ehrlich gesagt ist mir der Code etwas zu kompliziert. Schon mein Lehrer hat damals immer gesagt kopiere nie was du nicht verstehst




__________________________________________________ __________


Zitat von alzaimar:
Zitat von Astat:
1. Das Problem mit dem Datumsseparator:
DateSeparator := '.';
Meinst Du nicht, man schießt mit Kanonen auf Spatzen und handelt sich u.U. unangenehme Seiteneffekte ein?
Eine einfache Funktion, die einen Dateinamen für Logdateien erstellt, ist doch ausreichend:
Delphi-Quellcode:
Function GetLogFilename() : String;
Var
  y,m,d : Word;

Begin
  DecodeDate(Now,y,m,d);
  Result := Format('log\%.2d-%.2d-%.2d.TXT',[y,m,d]);
End;
Das klappt so leider auch nicht so ganz. Der IO Fehler besteht trozdem.
Es scheint so als würde er die Datei nicht richtig schließen, weil ich sie solang der Server läuft auch nicht im Windows öffnen kann.
Deshalb habe ich jetzt mal Testweise unter jedes WriteLn ein Closefile geschrieben. Leider ohne erfolg.
  Mit Zitat antworten Zitat
 


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 20:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz