Hi Leute,
eigentlich kenne ich mich ja mittlerweile mit den
Indy-Komponenten sehr gut aus, aber bisher habe ich das Logging im selber mit einen eigenen Logfile-KLasse, die in einem seperaten Thread arbeitet, realisiert.
Da ich jetzt aber gerade eine Cross-Platform Anwendung schreiben will(Windoof/Linux), kann ich meine bisherige Logfile-KLasse nicht benutzen weil :
Code:
procedure TJFThreadLogFile.Execute;
Var iCount : Longint;
bExit : Boolean;
HandleArray : Array of THandle;
wRes : Word;
iLoop : Byte;
begin
bExit := false;
setLength(HandleArray,2);
HandleArray[0] := hLogEvent;
HandleArray[1] := hCloseEvent;
repeat
wRes := MsgWaitForMultipleObjects(2,PDWord(HandleArray)^,false,INFINITE,QS_ALLINPUT);
case wRes of
WAIT_OBJECT_0 + 0 : //Log Event
begin
iLoop := 1;
iCount := getBufferCount;
While (iCount > 0) and (iLoop <= 3) do begin
doLog;
iCount := getBufferCount;
if iCount > 0 then
inc(iLoop);
end;
end;
WAIT_OBJECT_0 + 1 : // Close Event
bExit := true;
end;
until bExit;
SetLength(HandleArray,0);
end;
Wie Ihr seht benutze ich die Windows-
API und kann meine Klasse geswegen knicken.
Fragen:
1. Hat jemand ne Idee, wie man das ganze Cross-Plattformfähig machen könnte ?
(mit Sleep ist doch total unperformant, oder ?)
2. Wer hat sich schon mit den
Indy-Logging-Komponenten(IdLogEvent, IdLogfile u. IdLogStream) beschäftigt und kann mit sagen, wie das vernüftig funktioniert ? Bisher habe ich nur im
Indy-
FTP-Demp die Verwendung von IdLogEvent gefunden, bekomme aber selbst das Bsp. nicht so umgebogen das in eine DAtei geschrieben wird.
3. Oder ist es am besten ohne Logfile-Klasse(seperater THread), sondern die eigene Logfile-FUnktion einfach syncronisiert aufzurufen ?
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.