try
entercriticalsection(threadlock);
try
if synclist = nil then
synclist := tlist.create;
syncproc.syncrec := asyncrec;
synclist.add(@syncproc);
signalsyncevent;
if assigned(wakemainthread) then
wakemainthread(syncproc.syncrec.fthread);
leavecriticalsection(threadlock);
try
waitforsingleobject(syncproc.signal, infinite);
finally
entercriticalsection(threadlock);
end;
finally