Просмотр исходного кода

Optimization and multi threading enhancement

Yuri Tolsky 3 недель назад
Родитель
Сommit
d231682df3
1 измененных файлов с 32 добавлено и 16 удалено
  1. 32 16
      MyLog.pas

+ 32 - 16
MyLog.pas

@@ -10,10 +10,14 @@ Uses
   System.Classes,
   System.TypInfo;
 
-const
-  UseAppendMode = False;
-  // (true) Append mode: Single-file mode. The file is opened only when writing.
-  // (false) Normal mode: The file is open all the time
+
+  {$define bUseAppendMode}
+  // (defined) Append mode: Single-file mode. The file is opened only when writing.
+  // (not defined) Normal mode: The file is open all the time
+  {$ifdef bUseAppendMode}
+   {$define bAppendMultiThreaded} //If define - file to each thread in append mode
+  {$endif bUseAppendMode}
+
 var
   WriteTimeToLog         :Boolean = True;
   WriteMillisecondsToLog :Boolean = False;
@@ -34,8 +38,10 @@ var
   fStopWatch   : TStopwatch;
   fLogFile     : TextFile;
   fLogOpened   : Boolean;
-  fFileBuf     : array[1..4096] of Char;
   fLogFileName : string;
+ {$ifndef bUseAppendMode}
+  fFileBuf     : array[1..4096] of Char;
+ {$endif bUseAppendMode}
 
 procedure AddStr(var aStr :String; const aAddStr :String); inline;
 begin
@@ -67,9 +73,14 @@ begin
   fInLog.Acquire;
   try
     try
-      if UseAppendMode then begin  // Append mode
-        AssignFile(fLogFile, fLogFileName);
-        if FileExists(fLogFileName) then
+      {$ifdef bUseAppendMode}
+       {$ifdef bAppendMultiThreaded}
+        var vLogFileName := fLogFileName + '_'+ TThread.CurrentThread.ToString + '_' + UIntToStr(TThread.CurrentThread.ThreadID)+'.log';
+       {$else bAppendMultiThreaded}
+        var vLogFileName := fLogFileName;
+       {$endif bAppendMultiThreaded}
+        AssignFile(fLogFile, vLogFileName);
+        if FileExists(vLogFileName) then
           Append(fLogFile)
         else
           Rewrite(fLogFile);
@@ -78,10 +89,10 @@ begin
         finally
           CloseFile(fLogFile);
         end;
-      end else begin // Normal mode
+      {$else bUseAppendMode}
         Writeln(fLogFile, vFullStr);
         Flush(fLogFile);
-      end;
+      {$endif bUseAppendMode}
     except
       // Ignoring all exceptions
     end;{try}
@@ -166,9 +177,13 @@ begin
     var vTmpPath := TPath.GetTempPath + PathDelim + 'MyLog';
     CreateDir(vTmpPath);
     AddStr(vTmpPath, PathDelim + ExtractFileName(GetModuleName(HInstance)));
-    if UseAppendMode then
-      fLogFileName := vTmpPath + '.log'
-    else begin
+    {$ifdef bUseAppendMode}
+      {$ifdef bAppendMultiThreaded}
+        fLogFileName := vTmpPath;
+      {$else bAppendMultiThreaded}
+        fLogFileName := vTmpPath + '.log';
+      {$endif bAppendMultiThreaded}
+    {$else bUseAppendMode}
       var vInd := 0;
       repeat
         fLogFileName := vTmpPath + '.' + IntToStr(vInd) + '.log';
@@ -177,7 +192,7 @@ begin
       AssignFile(fLogFile, fLogFileName);
       System.SetTextBuf(fLogFile, fFileBuf);
       ReWrite(fLogFile);
-    end;
+    {$endif bUseAppendMode}
     fInLog := TCriticalSection.Create;
   except
     fLogOpened := False;
@@ -202,8 +217,9 @@ begin
   try
     if fLogOpened then begin
       fLogOpened := False;
-      if not UseAppendMode then
-        CloseFile(fLogFile);
+     {$ifndef bUseAppendMode}
+      CloseFile(fLogFile);
+     {$endif bUseAppendMode}
       fInLog.Free;
     end;
   except