[Lazarus] TThread.Synchronize

LacaK lacak at zoznam.sk
Tue Oct 25 14:46:52 CEST 2016


>
>> Check for Application.ProcessMessages and CheckSynchronize calls. 
>> These process synchronize queue, if I am not mistaken.
>
> I do not call CheckSynchronize nor ProcessMessages in my application.
> So only any LCL component or widget set can call it in background ?
>
 From Delphi doc:
"Synchronize causes the call specified by AMethod to be executed using 
the main thread, thereby avoiding multithread conflicts.
If you are unsure whether a method call is thread-safe, call it from 
within the Synchronize method to ensure that it executes in the main thread.
Execution of the current thread is suspended while the method executes 
in the main thread. "

Looking from where is called CheckSynchronize:

- TWin32WidgetSet.AppProcessMessages

- win32callback.inc:
      case Msg of
       WM_NULL:
       if (Window = Win32WidgetSet.AppHandle) then
       begin
         CheckSynchronize;
         ...

Cann't something send WM_NULL to application which can as reaction run 
sheduled thread ?
WM_NULL sends HandleWakeMainThread() which is handler stored in variable 
WakeMainThread

Messages in win32callback are processed by "main thread" only, so 
execution cann't happen while form method is executed ?

-Laco.

> -Laco.
>


More information about the Lazarus mailing list