El 7/2/19 a les 0:10, Martin Frb ha escrit:
On 06/02/2019 23:38, Luca Olivetti wrote:

and the exception logged (though the logging in turn uses synchronize).

What OS?

On Windows you can use  LazLogger.  (in Laz 2.0.0)
It uses TThread.Queue by default, but you can replace TLazLoggerFileHandleMainThread with TLazLoggerFileHandleThreadSave
in

function TLazLoggerFile.GetFileHandle: TLazLoggerFileHandle;
begin
   if FFileHandle = nil then
     FFileHandle := TLazLoggerFileHandleMainThread.Create;
   Result := FFileHandle;
end;

That means that writeln is called in the same thread. (works (at least) on windows, but make sure the handle is opened by the main thread, or it will be closed by whatever thread did open it, when that thread exits).

Thank you, but by "logged" I mean it is shown on a memo (actually a TSynEdit because it has much better performance under windows) in the main form.


i.e.:

procedure TRF182C.DoLog(category: TLogCategory; const msg: string);
begin
  FLogStep:=1;
  FLogCategory:=category;
  FLogMsg:=msg;
  FLogStep:=2;
  synchronize(@SyncLog);
  FLogStep:=1000;
end;

procedure TRF182C.SyncLog;
begin
  FLogStep:=3;
FLogProc(self,FLogCategory,CLogCategoryName[FLogCategory]+' RF182C '+FLogMsg);
  FLogStep:=4;
end;

Note the "FLogStep" added to see where the thread stopped. It always stops with FLogStep 2. FLogProc is assigned in Create and it's a method of the main form that adds the message to a TSynEdit (a different one depending on the sender thread) and logs it to a file. The thread is created when the application starts and it's terminated when it's closed (normally never).

Bye
--
Luca
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to