然后创建一个event,接着进入临界区(通过全局变量threadlock进行,因为同时只能有一个线程进入synchronize状态,所以可以用全局变量记录),然后就是把这个记录数据存入synclist这个列表中(如果这个列表不存在的话,则创建它)。可见threadlock这个临界区就是为了保护对synclist的访问,这一点在后面介绍checksynchronize时会再次看到。
再接下就是调用signalsyncevent,其代码在前面介绍tthread的构造函数时已经介绍过了,它的功能就是简单地将syncevent作一个set的操作。关于这个syncevent的用途,将在后面介绍waitfor时再详述。
接下来就是最主要的部分了:调用wakemainthread事件进行同步操作。wakemainthread是一个tnotifyevent类型的全局事件。这里之所以要用事件进行处理,是因为synchronize方法本质上是通过消息,将需要同步的过程放到主线程中执行,如果在一些没有消息循环的应用中(如console或dll)是无法使用的,所以要使用这个事件进行处理。
而响应这个事件的是application对象,下面两个方法分别用于设置和清空wakemainthread事件的响应(来自forms单元):