当有多个地方同时调用同一个函数时,请问DELPHI是怎样处理的,会不会出现数据的混乱,还是会在内存中分配不同的空间建立相同的多个函数,谢谢

解决方案 »

  1.   

    同意hiflower(花),函数是线程安全的,但公共变量在线程中使用要加信号量控制
      

  2.   

    VCL 组件不是线程安全的,因此必须在临界区中操作 Query,具体查看 TCriticalSection 的帮助
      

  3.   

    我未写过临界变量:这样写可以吗?        lockquery.Acquire;
            try
             chatform.rev.append;//存到数据表
             chatform.rev.FieldByName('rev').asstring:=pass;
            chatform.rev.ApplyUpdates;
            finally
             lockquery.Release;
            end;
      

  4.   

    就是这样,把所有 VCL、全局相关的代码包在里面
      

  5.   

    lockquery是我定义的临界对象,定义方法是lockquery:TCriticalSection,后创建对象实例,lockquery:=TCriticalSection.Create;请问:我在程序中很多地方都可一这样写吗,不用定义很多临界对象变量吧 
    lockquery.Acquire;
            try
              ......        
            finally
             lockquery.Release;
            end;
      

  6.   

    为什么要在很多地方写呢?只需要在可能并发访问的地方用,并且用同一个临界区变量。
    更好的办法是在线程中,把访问主线程中 VCL 对象的代码组成一个方法,然后用 Synchronize()执行此方法