Am 08.10.2010 16:22, schrieb Michael Van Canneyt:
On Fri, 8 Oct 2010, Graeme Geldenhuys wrote:
On 8 October 2010 15:57, Andrew Brunner wrote:
A better way of achieving this is looking at the collection of threads
you have. Set your own booleans for Finished or if they
freeonterminate you will need to create an
TCompletes=Array[0..threadcount] of boolean. And as the threads free
set the variable of TCompletes to true. Then you can poll the
Completes to see if they are all true.
That comes down to the same thing I have done with the single boolean
variable. All logging thread classes descend from a base log thread
class. It's in that base thread class that I implemented the boolean
variable.
There are a million ways to accomplish safe thread usage without
waitfor...
Yes, but my point is that FPC's "single source, compile everywhere"
doesn't works so well in this case, because TThread.WaitFor works
completely different under Windows to what it currently does under
Unix/Linux. So the code now has to contain IFDEF's - which all tiOPF
team members hate.
It is impossible to make it work like Windows, since other OSes simply
do not have a single event queue (as mentioned by Sergei Gorelkin).
Rather, one should not take Windows as the reference platform, something
that the tiOPF developers do. Doing so will always create problems.
I strongly suspect that the code will also not function on windows if
you have a windows non-gui, non-event based program, but that would have
to be
investigated.
Michael.
It will work because the Windows RTL waits for the thread's handle OR
the synchronize event. So it will call CheckSynchronize automatically if
a thread calls Synchronize and then continue waiting on the two handles
again.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal