如何在线程中锁定一个全局成员,不让其他线程访问?比如有两个线程同步运行,都涉及到对同一个memo框的写操作,现在执行时有时会出现错误,我想在一个线程写memo框的时候锁定,写完后再释放,请问思路是这样的吧?如何操作?

解决方案 »

  1.   

    你的思路是正确的。 方法很多比如使用临界区
    mainthread;
      ThreadLock: TRTLCriticalSection;
      InitializeCriticalSection(ThreadLock);thread1:
      EnterCriticalSection(ThreadLock);
      ... your work code
      LeaveCriticalSection(ThreadLock);thread2:
        EnterCriticalSection(ThreadLock);
      ... your work code
      LeaveCriticalSection(ThreadLock);最后在主线程要
      DeleteCriticalSection可以去VCL看看 TThread的实现哦。。
      

  2.   

    beyondtkl兄,我以前用的Tcriticalsection,代码如下:
     mainthread; 
     m_critical:Tcriticalsection;
     m_critical:=Tcriticalsection.create; thread1:     
        m_critical.Acquire;
          try
          memoMsgt.Lines.Add('***********');
          finally
          m_critical.Release;
          end;
    但是这样好像没效果,请问TRTLCriticalSection有什么不同?
    刚才说错了,是在主线程和线程1里都要访问memo,做法是一样吧