现在的位置: 首页 > 综合 > 正文

CWinThread内存释放问题(VC++6.0)

2013年03月12日 ⁄ 综合 ⁄ 共 745字 ⁄ 字号 评论关闭

当启动CWinThread后使其挂起,再对其释放时不能释放干净
执行如下代码,我们可以看到任务管理器内存增长很快,出现内存泄漏

(p是当前类对象指针,传给线程函数的作用是让线程访问类成员变量)
while(true)
 {
  Sleep(100);
  if(p->th!= NULL)
  {
   p->th->ExitInstance();
   CloseHandle(p->th->m_hThread);
  }
  p->th = AfxBeginThread(Function,(LPVOID)p,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
  p->th->m_bAutoDelete = FALSE;
}

执行如下代码不会出现内存增长:
while(true)
 {
  Sleep(100);
  if(p->th!= NULL)
  {
   p->th->ExitInstance();
   CloseHandle(p->th->m_hThread);
  }
  p->th = AfxBeginThread(Function,(LPVOID)p);
  p->th->m_bAutoDelete = FALSE;
}
让CWinThread自己释放也类似
如下会出现内存增长:
while(true)
 {
  Sleep(100);
  p->th = AfxBeginThread(Function,(LPVOID)p,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
}
如下代码不会出现内存增长:
while(true)
 {
  Sleep(100);
  p->th = AfxBeginThread(Function,(LPVOID)p);

抱歉!评论已关闭.