Zitat von
smudo:
Hallo
,
ich möchte das Loggen meiner Anwendung über einen Thread lösen.
Delphi-Quellcode:
//Schreibt den LogPuffer solange nicht mit DoStop abgebrochen wurde
procedure TLogThread.DoWait;
begin
while (PStop=False) or //eine Abbruchvariable
(PLogPuffer.Count>0) do //StringList enthält die zu loggenden Zeilen
begin
if (PLogPuffer.Count>0) then
begin
WriteLog(PLogPuffer[0]); //schreibt eine Zeile <--hier knallts manchmal
PLogPuffer.Delete(0); //löscht diese Zeile
end;
end;
end;
In WriteLog wird wiederum eine StringList PLogs gefüllt. Sollte eine bestimmte Zeilenanzahl erreicht sein,
wird die erste Zeile gelöscht. --> enthält also nur die x aktuellsten Zeilen.
Letztendlich soll mit PLogs.SaveToFile die Liste der aktuellsten Logs gespeichert werden (die Liste wird also bei jedem Loggen komplett gespeichert) und dabei kommt es, wenn viele Log-Einträge schnell hintereinander geschrieben werden, ab und an zum Crash (Auf die Datei kann nicht zugegriffen werden).
Was passiert da und wie kann ich dem entgegenwirken?
Vielen Dank
René
Du musst Deine Threads synchronisieren. Schau mal nach unter
InitializeCriticalSection, [
oh]DeleteCriticalSection,[/
oh]
EnterCriticalSection,
LeaveCriticalSection.