leavecriticalsection(threadlock);
end;
finally
closehandle(syncproc.signal);
end;
if assigned(asyncrec.fsynchronizeexception) then raise asyncrec.fsynchronizeexception;
end;
end;
这段代码略多一些,不过也不算太复杂。
首先是判断当前线程是否是主线程,如果是,则简单地执行同步方法后返回。
如果不是主线程,则准备开始同步过程。
通过局部变量syncproc记录线程交换数据(参数)和一个event handle,其记录结构如下:
tsyncproc = record
syncrec: psynchronizerecord;
signal: thandle;
end;