Am 17.09.2022 um 07:02 schrieb Hairy Pixels via fpc-pascal:
Can anyone explain why this program doesn’t capture the state of the local
variable “I” and execute in order? It will return something like this:
Invoked: 3 id: 00000001029D41C0
Invoked: 0 id: 00000001029D42C0
Invoked: 0 id: 00000001029D44C0
Invoked: 0 id: 00000001029D43C0
It works if you call Start directly before WaitFor, but why? I would expect the
function reference to capture i, start the thread and then block the program
after the sleep calls but instead the sleep calls appear to do nothing and the
program exists immediately.
It seems you haven't read the part about capturing variables in my
announcement mail, cause you have two problems:
First the specific problem your code has: i is a global variables and
global variables are *never* captured, because they don't need to.
But even if you'd change your code so that the threads are initialized
inside a procedure instead of the main block this would still not work,
because variables are captured *by reference* which means that i would
be shared between all newly created threads plus the main thread and
depending on how the threads are scheduled the main thread will reach
the call to WaitFor where i will again start from 0.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal