[Lazarus] Why is there a define switch UseCThreads?
Bo Berglund
bo.berglund at gmail.com
Mon Nov 11 08:38:06 CET 2019
On Mon, 11 Nov 2019 00:20:59 +0100, Sven Barth via lazarus
<lazarus at lists.lazarus-ide.org> wrote:
>Bo Berglund via lazarus <lazarus at lists.lazarus-ide.org> schrieb am So., 10.
>Nov. 2019, 23:29:
>
>> I have ported a console application from Windows to Linux (Raspbian
>> Buster) and I got to wonder about the check for a defined symbol
>> appearing in the beginning of the code as produced by the Lazarus
>> template:
>>
>> uses
>> {$IFDEF UNIX}{$IFDEF UseCThreads}
>> cthreads,
>> {$ENDIF}{$ENDIF}
>>
>> Would it not be enough to use this instead:
>> uses
>> {$IFDEF UNIX}
>> cthreads,
>> {$ENDIF}
>>
>> Is there a heavy hit on perfortmance or such if the conditional is not
>> used but instead just checking if we are on UNIX?
>>
>> What happens if one does not use threads in ones code but removes the
>> conditional UseCThreads as shown above?
>>
>> For example if I am using Indy10 objects they are threaded so in that
>> case I assume I need to use cthreads. But in any other case, how can I
>> know that some used package might rely on threads and so needs this
>> uses clause?
>>
>> Basically:
>> What damage does it do if cthreads are in the uses clause but no
>> thread appears in the program code (yet)?
>>
>
>The "damage" is that your application will link against the C library.
>Sometimes that's not desirable and quite some FPC code can be used without
>that (e.g. the compiler itself does not need to link against the C library
>and thus the binary is usable on various Linux distributions and versions).
>
So if one does not enable use of cthreads there are still threads
available also on Linux?
I interpreted the existence of this switch as "if you want to use
threads on Linux you need to enable UseCThreads"...
If I do not have cthreads as a uses item but still want to use for
example Indy10, will it still work?
--
Bo Berglund
Developer in Sweden
More information about the lazarus
mailing list