问题一 :SuspendThread 和ResumeThread  使用的时候要注意些什么?问题二:下面这段话不是很明白(如果线程试图从堆栈中分配内存,那么该线程将在该线程上设置一个这句话和SuspendThread调用什么关系?)
    SuspendThread 的原形是:DWORD SuspendThread(HANDLE hThread);它返回的是线程的前一个暂停记数.线程暂停的次数可以是MAXIMUM_SUSPEND_COUNT次(在WINNT.H中是127);SuspendThread与内核方式的执行是异步的,但是在线程恢复运行之前,不会发生用户方式的执行。调用SuspendThread必须小心,如果线程试图从堆栈中分配内存,那么该线程将在该线程上设置一个锁,当其他线程试图访问该堆栈时,这些线程的访问就被停止,直到第一个线程恢复运行,只有知道目标线程在干什么时,并且采取强有力的措施避免因暂停线程带耒的问题或死锁状态,SuspendThread才是安全的。

解决方案 »

  1.   

    问题一:应该没有什么要注意的,只要createthread创建线程的时候定义为create_SUSPENDED,.
    问题二:就是说suspendThread有可能会导致线程的死锁。要小心使用,挂起了就一定要唤醒。
      

  2.   

    中心思想就是避免同步对象的死锁。比如当你A线程与B线程同时要访问一个对象C的时候,都要先锁定对象才能访问。这个时候如果A线程刚好锁定了C对象,还没有释放这个锁的时候,你就把A给SUSPEND了,则势必造成B线程在访问的时候失败或无限制等待。一般情况下只要你RESUME A线程即可解决。但就怕你形成循环锁,这样的话,就相当于你的整个系统已经挂掉。
      

  3.   

    看了vcPlayer的解释立马解决掉一个问题,谢谢!