[Lazarus] Using Lazarus for non-graphical apps

Michael Schnell mschnell at lumino.de
Wed Jan 8 10:13:51 CET 2014

On 01/07/2014 06:11 PM, Mark Morgan Lloyd wrote:
>> IMHO, the Pascal way of handling such task is using a thread.
> That's in the main code, not a background thread, and I have good 
> reasons for wanting to do it like that.

OK. There are decent reasons in certain projects. But Generally the 
"Pascal way" is to do event driven programming. If you do a blocking I/O 
in the main thread, the project is completely idle until the I/O device 
unblocks it. This is not desirable as soon as anything should be done in 
the meantime. That is why it usually is the better way to do blocking 
I/O only in a thread. But if you do that, you mostly need a mechanism to 
notify the main thread about the proceedings in all threads. This is 
only decently handled by an event queue such as provided by 
TThread.Synchronize, TThread.Queue, CheckSynchronize, WakeMainThread, ...

> The question was whether I could still use TThread.Synchronize for 
> background threads, which do not in this particular case need a 
> significant amount of OS interaction.
It does not make much sense to use TThread.Synchronize if the main 
thread can block in any other place than in CheckSynchronize.


More information about the Lazarus mailing list