On Wed, Jun 19, 2013 at 04:05:19PM +0200, Ludo Brands wrote: > On 06/19/2013 12:10 PM, Henry Vermaak wrote: > > On Thu, May 30, 2013 at 03:54:08PM +0100, Henry Vermaak wrote: > >> Hi list > >> > >> When I call TThread.WaitFor, I almost always get a 100ms delay, > >> presumably due to the CheckSynchronize(100) here: > >> > >> > http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/unix/tthread.inc?view=markup#l296 > >> > >> Is it feasible to add an extra check so that this doesn't happen when > >> FOnTerminate isn't assigned and DoSynchronizeMethod is false? > >> > >> Also, it looks like spinning on FFinished like this can get you into > >> trouble with cpu re-ordering, or am I missing something? > > > > Anyone have thoughts on this? > > WaitForThreadTerminate(FHandle, 0) blocks the main thread and skipping > the spin on FFinished would block all threads that call synchronize > until the thread that is waited for finishes. You can only test > assignment of FOnTerminate for the current thread and not for other > threads.
Ah, right. I thought the spin on FFinished was only needed to prevent deadlock if the current thread has an OnTerminate event. Why worry about other threads synchronising at that point? > DoSynchronizeMethod doesn't exist anymore in 2.7.1. Right, sorry, I'm not really familiar with the internals. > I agree the current implementation is not very satisfactory when you > don't use synchronize. You could be better off using > WaitForThreadTerminate yourself instead of WaitFor. This is what I ended up doing, was just wondering if there's a way to remove this penalty somehow. Henry _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel