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

Reply via email to