Die Synchronize-Methode von TThread arbeitet auch mit Windows-Messages.
Delphi-Quellcode:
procedure TThread.Synchronize(Method: TThreadMethod);
begin
FSynchronizeException :=
nil;
FMethod := Method;
SendMessage(ThreadWindow, CM_EXECPROC, 0, Longint(Self));
// falls im Kontext des Hauptthreads eine Exception ausgelöst wurde
// wird sie hier im Kontext ausgelöst
if Assigned(FSynchronizeException)
then raise FSynchronizeException;
end;
Dies scheint wirklich die einzige Technik zu sein, um mit einer
VCL (sowie viele Windows
API Funktionen) umzugehen, die nicht Threadsicher ist.
Auch
COM/
DCOM verwendet intern Windows-Messages beim Single-Appartment.