任务线程访问vcl不使用synchronize方法而直接使用
TCriticalSection.Enter;
  dbgrid1.datasource:=ds;
TCriticalSection.Leave这样行么?

解决方案 »

  1.   

    没用过LZ方法,只是用synchronize,也请求确认
      

  2.   

    那求教下synchronize和使用TCriticalSection.Enter;的区别,哪个高效点
      

  3.   

    区别我觉得是这样的:
    如果synchronize用多了,
    如果任务线程多的话就跟没有使用多线程一样,
    因为所有的任务线程都是等待主线程来执行。
    如果是使用TCriticalSection来实现,
    因为任务线程锁着的资源相同的,则各个任务线程排队使用资源
    如果任务线程锁着的资源不同的,则不用排队就执行起来了。如果所有的任务线程使用synchronize来实现,
    则所有任务线程排队由主线程来一个一个执行,
    这个情况多的话就跟没用多线程一样。
      

  4.   

    所有要访问到目标资源的线程都加上CriticalSection的话可以。
    synchronize是交给主线程去执行,任务线程多的话效果不好
      

  5.   

    如果自己写的线程里使用 TCriticalSection的话,我觉得应该效率比 synchronize会高些