你说的基本是这个意思。它的目的是避免多个子线程同时访问主线程资源。
示例:
procedure ServerThread.ListItemEnd;  //子线程的一个方法
begin
  if (ListItem <> nil) then
    ListItem.SubItems.Strings[3] := '传送完毕'; //ListItem是主线程的一个TreeView的一行
end;procedure ServerThread.ClientExecute; //子线程执行
begin
  Synchronize(ListItemEnd);
  //如果直接写ListItemEnd,可能发生冲突。
end;
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
             毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
  I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”等字样,删除它们';
I.Desire := '加不加分随你';
—————————————————————————————————
       

解决方案 »

  1.   

    当创建了多个线程,并且多个线程都要访问同一资源,,就有可能出现混乱,于是用Synchronize来控制,使同一时间只有一个线程使用那部分资源,Synchronize参数里面的代码就是多线程需要公共的代码!
      

  2.   

    1。synchronize方法的产生与vcl的局限性有关,因为vcl控件在同一时刻只能被单线程访问,如果多个线程同时访问vcl,vcl会出现问题。所以问了安全地访问vcl,Tthread类提供了一个方法叫synchronize,他可以让线程中的方法在主线程中执行,所以我们可以把访问vcl的代码都放在这个方法中,然后由主线程执行,从而确保vcl能被安全地访问调用.它的类型是TThreadMethod=procedure of object;procedure 参数:Sychronize(Method:TThreadMethod);
    2。当创建一个线程时,vcl会在主线程中创建一个隐含的线程窗口,这个窗口的作用就是把synchronize调用的访问vcl的方法排队.synchronize把Method参数传递过来的方法保存在thread的fmethod字段中然后给线程窗口发一个cm_execproc消息,并把消息的lparam参数设为self,当线程窗口收到这个消息时,就调用Fmethod所制定的方法.
      

  3.   

    1.如果不访问vcl控件(vcl控件是不是就是窗口控件)是否也能用synchronize方法控制
    2.如何获得线程的ID号
    thx
      

  4.   

    1.如果不访问vcl控件(vcl控件是不是就是窗口控件)是否也能用synchronize方法控制
    2.如何获得线程的ID号
    ================================
    1、可以
    2、TThread.ThreadID
    —————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Explain := '假如上述代码中出现“OA”等字样,删除它们';
    I.Desire := '加不加分随你';
    —————————————————————————————————
           
      

  5.   

    暴雪讲的有理..
    VCL有一个缺陷就是不支持多线程访问..
    为了弥补这一缺陷borland使用了synchronize这一方法控制对VCL的并发访问