[Lazarus] nonlcl basic issue: is codetools LCL dependent?

Michael Schnell mschnell at lumino.de
Thu Jun 26 16:52:59 CEST 2014


On 06/26/2014 03:54 PM, Mattias Gaertner wrote:
> Application.ProcessMessages calls CheckSynchronize and calls the
> queued async calls. Under nogui that's all.
Here the waiting and sleeping mechanism is lacking.

Application.ProcessMessages supposedly calls CheckSynchronize with the 
Timeout set to 0.

The timeout is critical for me, as it is used to implement TTimer.

In my Application CheckSynchronize always is called with the Timeout set 
to a non zero  Value.

TThread.Queue in the end calls WakeMainThread() to wake the main thread 
(i.e. terminate the CheckSynchronize call waiting for a timeout).

I did not yet find any lower level non private queue-feed functionality 
usable  instead of TThread.Queue.

> Other widgetsets process
> the widgetsets events as well.
They implement a second queue besides the one the RTL implements for 
TThread.

> A LCL program calls Application.Run, which is a loop calling
> Application.ProcessMessages. You can create sub loops. A common example
> is TForm.ShowModal, which also calls Application.ProcessMessages.
> Or you can do your own loop, in which case you have to call it yourself.
>
> If you call CheckSynchronize instead of Application.ProcessMessages you
> simply omit the widgetsets and queued async calls.
Other "active" LCL Widget Types call CheckSynchronize with Timeout set 
to Zero and implement their own arch depending waiting mechanism, as 
they are greatly arch depending anyway. My tiny Application not 
inherently arch depending implementation just uses CheckSynchronize to 
do the waiting (e.g. for TTimer) and hence does not an arch depending 
implementation for this.

-Michael




More information about the Lazarus mailing list