@vargatam77
It depends on your goals (or rather, the goals of the application), but there are also other methods that can be used to update a GUI.
For example, in your case, you could run your threads at maximum speed even without sleep, yield, or other events, storing the result(s) without updating the GUI directly.
The interface is updated from a timer event that accesses individual values via properties of the individual threads.
You can program the timer with an interval of 100 ms or whatever works best for you.
This way, you can completely decouple the graphics part from the operational part.
This method is suitable if you need to display values that change rapidly and are not interested in them on a timely basis.
In any case, the GUI is not directly subject to the control of Lazarus/FPC or your program, as it uses operating system objects/methods that in no way guarantee processing times.