<div dir="ltr"><div class="gmail_default" style="font-family:'courier new',monospace"><span style="font-family:arial">2014-09-18 23:10 GMT+08:00 Xiangrong Fang </span><span dir="ltr" style="font-family:arial"><<a href="mailto:xrfang@gmail.com" target="_blank">xrfang@gmail.com</a>></span><span style="font-family:arial">:</span><br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div style="font-family:'courier new',monospace"><br></div><div><div><div><font face="courier new, monospace"><div>I suspect that it is blocked on the RTLeventWaitFor, because if I use this:</div><div><br></div><div>    RTLeventWaitFor(Barrier, 1000);</div><div><br></div><div>It will periodically pause for 1 second, then continue.</div></font></div></div></div></div></blockquote><div><br></div><div class="gmail_default" style="font-family:'courier new',monospace">I found the problem myself. Instead of writing:</div><div class="gmail_default" style="font-family:'courier new',monospace"><br></div><div class="gmail_default"><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace">while not Terminated do begin</font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace">  RTLeventWaitFor(Barrier);</font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace">  if not IsPrime then Number := 0;</font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace">  Application.QueueAsyncCall(@AddPrime, PtrInt(Self));</font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace">  RTLeventResetEvent(Barrier);</font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace">end;</font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace"><br></font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace">I should write:</font></div><div class="gmail_default" style="font-family:arial,sans-serif;font-size:13.63636302947998px"><font face="courier new, monospace"><br></font></div><div class="gmail_default" style="font-size:13.63636302947998px"><div class="gmail_default" style="font-family:arial,sans-serif"><font face="courier new, monospace">while not Terminated do begin</font></div><div class="gmail_default" style="font-family:arial,sans-serif"><font face="courier new, monospace">  RTLeventWaitFor(Barrier);</font></div><div class="gmail_default" style="font-family:arial,sans-serif"><font face="courier new, monospace">  RTLeventResetEvent(Barrier);</font></div><div class="gmail_default" style="font-family:arial,sans-serif"><font face="courier new, monospace">  if not IsPrime then Number := 0;</font></div><div class="gmail_default" style="font-family:arial,sans-serif"><font face="courier new, monospace">  Application.QueueAsyncCall(@AddPrime, PtrInt(Self));</font></div><div class="gmail_default" style="font-family:arial,sans-serif"><span style="font-family:'courier new',monospace">end;</span><br></div><div style="font-family:arial,sans-serif"><font face="courier new, monospace"><br></font></div><div style="font-family:arial,sans-serif"><font face="courier new, monospace">Because when doing the AsyncCall, the main thread may have called</font></div><div style="font-family:arial,sans-serif"><font face="courier new, monospace">RTLeventSetEvent BEFORE the RTLeventResetEvent() is called.</font></div><div style="font-family:arial,sans-serif"><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Xiangrong</font></div></div></div></div></div></div>