一、我这样处理大家看有什么问题没有?CCriticalSection cParseSection
try
{
  cParseSection.Lock(); 
  try
  {
。;
  }
  catch(...)
  {
    ;
  }
  cParseSection.Unlock() ;
}
catch(...)
{
  return;
}总的意思是当cParseSection.Lock失败时,程序可以正常退出,不会死锁。
我的程序有多个线程,全部采用以上的处理方式,平时运行挺好的,可有时会出现死锁,不知为什么?二、我想问如果一线程多次进入lock,别的线程是不是就进不去了。
    另外,一个unlock多次是不是别的线程就很难再lock了?
三、如果一个线程多次setevent,别的线程resetevent能起到效果么?答题只要回答最上面的第一问题就有效。其他的问题是我非常糊涂的地方,如果也能回答我,我将非常感谢!

解决方案 »

  1.   

    最好是使用如下的方式CSingleLock lock(&cParseSection,TRUE);利用C++类的析构机制来保证(即使是出现异常,一样可以得到保证)。
      

  2.   

    1.如果内层catch抛出异常则Unlock不会被调用
      

  3.   

    cParseSection.Lock(); 
      try
      {
    。;
      }
      catch(...)
      {
       ;
      }
      cParseSection.Unlock() ;这个catch如果有return的可能会死锁,另外最外边的try——catch好像没必要
      

  4.   

    同意 DentistryDoctor(雅克医生<改行做程序员了>) 
    还有注意你在编写这样得函数时,本身在调用lock和unlock时会产生死锁,需要执行双锁检查机制。
    最好还是用原始EnterCriticalSection和LeaveCriticalSection好!!!
      

  5.   

    或者使用
    __try {} 
    __finally {
        // unlock
    }结构