psynchronizerecord = ^tsynchronizerecord;
tsynchronizerecord = record
fthread: tobject;
fmethod: tthreadmethod;
fsynchronizeexception: tobject;
end;
用于进行线程和主线程之间进行数据交换,包括传入线程类对象,同步方法及发生的异常。
在synchronize中调用了它的一个重载版本,而且这个重载版本比较特别,它是一个“类方法”。所谓类方法,是一种特殊的类成员方法,它的调用并不需要创建类实例,而是像构造函数那样,通过类名调用。之所以会用类方法来实现它,是因为为了可以在线程对象没有创建时也能调用它。不过实际中是用它的另一个重载版本(也是类方法)和另一个类方法staticsynchronize。下面是这个synchronize的代码:
class procedure tthread.synchronize(asyncrec: psynchronizerecord);
var
syncproc: tsyncproc;
begin
if getcurrentthreadid = mainthreadid then
asyncrec.fmethod
else
begin
syncproc.signal := createevent(nil, true, false, nil);