在头文件中有如下定义 CPtrArray thdptr;typedef struct ithread
{
  int    thdnum;
  HANDLE ihandle;
  DWORD  iuid;

} ithread在cpp文件中,我把创建的每一个线程的handle和id,再加一个预定号放进这个结构再 Add 进 thdptr 以便后期监视管理CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));       uithdid=pThread->m_nThreadID;
       uithd = pThread->m_hThread;     
       ithd++;       ithread *pthd = new ithread();
       pthd->thdnum = ithd;
       pthd->ihandle = uithd;
       pthd->iuid = uithdid;    thdptr.Add(pthd);在退出某个线程时,该怎么释放掉之前申请的空间?

解决方案 »

  1.   


    那个CPtrArray 是在主线程内用于监视进程内的其他线程,用于当发现意外时在CPtrArray中找到那个线程的handle和id然后强制做掉它,但当记录在案的线程正常释放后,CPtrArray内记录的之前申请的空间还在,要怎么过去把之前申请的那个记录空间释放掉?
      

  2.   

    线程正常释放了以后,你把CPtrArray中对应的那个记录直接删除就可以了
      

  3.   

    thdptr.Add(pthd); 统一管理,有了ADD,再配1个DELETE就是了线程正常结束时 thdptr.del(pthd);就可以了啊
      

  4.   

    那样的话,我应该是先找到对应的线程吧,比如说,有个线程执行了1分钟了还没反应,我查到他的配给号是5,那么我要做的就是
    for(int c=0; c<thdptr.GetSize();c++)
    {
        ithread *ith = thdptr[c];
      
       if(ith->thdnum==5)
     {  
       thdptr.del(ith);
       ith = NULL;
       break;
     }
    }
    编译出错了 T-T
      

  5.   

          ithread *pthd = new ithread(); 
          pthd->thdnum = ithd; 
          pthd->ihandle = uithd; 
          pthd->iuid = uithdid;   thdptr.Add(pthd); 
    这里有一个new和一个add释放的时候找到那个ithread,先delete new的内存,然后remove链表中的节点