无法解释为什么 
synchronization access object (CSingleLock) 是在每个 function中使用的,

synchronization object(CCriticalSection)是放在类中作为data member的,为什么CSingleLock不能作为data member使用了。
反正我作为data member使用一段时间,CSingleLock报一个错误。有知道的请解释一下。

解决方案 »

  1.   

    CSingleLock在函数内使用,当函数返回时将释放CSingleLock对象,同时进行解锁。
      

  2.   

    CSingleLock就是为了使用方便才定义的,你作为成员变量失去他本来的意义了
      

  3.   

    CSingleLock对象在栈上定义,构造时,Lock
       
      CSingleLock的析构函数会自动调用同步对象的Unlock。
      

  4.   

    CSingleLock可以作为data member使用,但这样做会有性能上的损失。
    CSingleLock是为函数使用设计的,一般来讲,使用锁需要Lock,Unlock两步,而使用CSingleLock时,只需要一步即可,即在函数内部,声明一个CSingleLock,同时指定互斥对象的指针,在函数执行完毕的时候,会自动执行CSingleLock的析构函数,从而解锁。
    CSingleLock是对锁的一个封装,它的基本原理如下:
    CSingleLock(Lock* pLock)
    { pLock->Lock(); }~CSingleLock()
    { pLock->UnLock(); }所以说,若将CSingleLock作为data member使用,可以,但是有效率损失,还不如直接使用普通的锁。
    使用CSingleLock有两大好处:
    1.防止编程笔误,只有Lock,没有UnLock。
    2.函数异常退出时,有可能流程走不到UnLock处,会导致资源锁死,而使用CSingleLock,则会在函数出栈时,自动调用CSingleLock析构函数。
    使用CSingleLock有一大坏处,就是性能上总会有损失的,因为它多了一个构造与析构的过程,但对于普通应用来讲,优处大于缺点。
      

  5.   


    有点像,但是我的程序没有发生异常,
    我在break的地方仔细的看过,有点像是timeout.
    因为我的CSingleLock 再构造函数中生成对象的,所以时间一长我没有释放,timeout了。
      

  6.   

    这个解释的不错。。http://www.vchome.net/tech/multithread/thread44.htm
    具体在MFC怎么用,实践ing中。。谁有成功的拿来show一下啦