Synchronize()是如何工作的

    你或许已把Synchronize()当成一个黑匣子,不清楚它是如何工作的。如果愿意揭开这个谜,请看下面。

    当你在程序中第一次创建一个附属线程时,VCL将会从主线程环境中创建和维护一个隐含的线程窗口。此窗口唯一的目的是把通过Synchronize()调用的方法排队。

Synchronize()把由Method参数传递过来的方法保存在TThread的FMethod字段中,然后,给线程窗口发一个CM_EXECPROC消息,并且把消息的lParam参数设为self(这里指线程对象)。当线程窗口的窗口过程收到这个消息后,它就调用FMethod字段所指定的方法。由于线程窗口是在主线程内创建的,线程窗口的窗口过程也将被主线程执行。因此,FMethod字段所指定的方法就在主线程内执行。

原文地址:https://www.cnblogs.com/spider518/p/1904834.html