[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