Einzelnen Beitrag anzeigen

Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#4

Re: Connection Closed Gracefully.

  Alt 21. Dez 2009, 03:02
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
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat