[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.

-Michael




More information about the Lazarus mailing list