定义全局变量:
CCriticalSection cs;
在一个线程里面:
cs.Lock();
这里执行一些操作
cs.Unlock();问题是外部有些情况会终止这个线程,没有cs.Unlock(); 这样再次启动就无法执行了
怎么解决? 

解决方案 »

  1.   

    你外部结束前cs.Unlock();不行吗?你这不是全局的吗?
      

  2.   

    强行终止线程时,线程所占用的很多资源都不能释放,所以程序最好不要强行终止线程,可以通过设置标志或事件、消息等让线程主动退出。如果线程运行中可能产生异常,应使用try来捕获,并做相应的释放操作。
      

  3.   

    同意3#,最好是让线程自己return函数返回,设置标记事件对象等等都是可行的
      

  4.   


    在终止该程序前,设定个标志,如果该线程资源已经被锁定,就先进行 Unlock解锁,
    再终止线程@
      

  5.   

    设置一个tid, 作为关联使用这个cs的线程id.
    如果openthread(...tid...), GetExitCodeThread(...)返回STILL_ACTIVE则说明线程运行正常,否则表示已经被结束了,这时你可以手动调用unlock.
    思路很多,只要往判断线程状态的方向上想就行了...
      

  6.   

    3# 说的很好,补充一下在pthread库(linux)下,当线程结束的时候线程中的资源是释放的,不释放资源是微软特定做的操作,为了防止其他线程访问被终结的线程所占资源时候出错。
    但是,使用互斥量,系统是会将其资源释放的,并变成丢弃状态,句柄被激活。
      

  7.   

    谢谢大家,原来看文档说只有线程自己能unlock自己lock的CriticalSection,后来试了下,在线程外面,别的线程也可以unlock,那就没有问题了,直接强制结束线程再unlock