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