Hallöchen,
dammit ich aus verschieden Threads in mein Log Memo schreiben kann habe ich mir folgende Procedure mit TIdNotify gebastelt. Ich hatte es vorher mit TIdSync, aber da wird ja ein Päuschen eingelegt, bis es abgearbeitet ist ?
Delphi-Quellcode:
Type
TVarRecArray = array of TVarRec;
Log = class(TIdNotify)
protected
fMemo: TMemo;
fStr: AnsiString;
fArgs: TVarRecArray;
procedure DoNotify; override;
public
constructor Create(const Str: AnsiString; const Args: array of TVarRec); ReIntroduce; overload;
class procedure cs_Log(const Str: AnsiString; const Args: array of TVarRec);
end;
implementation
//----------------------------
function CopyArgs(a: array of TVarRec): TVarRecArray;
var
i: Integer;
begin
SetLength(Result, length(a));
try
for i := 0 to length(a) - 1 do
Result[i] := a[i];
except
end;
end;
// ----------------------
constructor Log.Create(const Str: AnsiString; const Args: array of TVarRec);
begin
inherited Create;
fMemo := Frm.ServerInfo;
fStr := Str;
fArgs := CopyArgs(Args);
end;
// ---------------------------------------------------------------------------------
class procedure Log.cs_Log(const Str: AnsiString; const Args: array of TVarRec);
begin
with Create(Str, Args) do
Notify;
end;
// --------------------
procedure Log.DoNotify;
Var
Res, Res2: AnsiString;
ADate: TDateTime;
begin
inherited;
begin
ADate := now;
try
Res := Format(fStr, fArgs);
except
end;
Res2 := FormatDateTime('c', ADate);
Res2 := Res2 + ' ' + Res;
fMemo.Lines.Add(Res2);
end;
end;
Main:
Log.cs_Log('Client.Connect %8s/%.4X', [PeerIP,PeerPort]);
Die Frage ist jetzt: cs_log gibt sich, nach absenden der Message, selbst wieder frei ?
Funktionieren tut es so prima aber ist das auch richtig so? Gerade wegen der Args.
Besten Dank
totti14