[Lazarus] TThread.Synchronize
LacaK
lacak at zoznam.sk
Tue Oct 25 14:07:25 CEST 2016
>
>> My understanding is that, Synchronize schedules execution of
>> MyForm.MyMethod to main thread, so method is not executed until
>> control is returned from event handler in MyForm. Right?
> TThread.Synchronze pushes the procedure that is given as a parameter
> (including it's Self pointer) to the event queue and then the Therad
> that called TThread.Synchronize is stalled.
ok
> Some time later the main (GUI) thread will execute the scheduled
> procedure. When this call returns, the thread that called
> TThread.Synchronize is activated.
ok
but what is relation between "main thread" and this "sheduled procedure"
? Can "sheduled procedure" jump into execution while main thread is
still executing prior called form method ?
>
> There also is TThread.Queue that works identically, only without
> stalling the thread.
yes, but I do not want this
>
>> But in my case happens, that method is executed while execution of
>> event handler does not finished yet ... is it expected behavior ?
>
> What is "that method"? If same is called by the thread after
> TThread.Synchronize, IMHO this can't be correct.
Yes this can happen.
MyForm.MyMethod is called also from event handler and also is used in
Synchronize(@MyForm.MyMethod)
How can this happen/play role?
I have suspection that somewhere in Win32 widgetset is called
CheckSynchronize as reaction on some message or so, which releases
execution of MyForm.MyMethod ... but it is inappropriate, does not ?
-Laco.
More information about the Lazarus
mailing list