反复创建线程,句柄数未被释放
今天写了一个小的测试程序,主进程启动一个子线程A,再由这个A子线程启动一定数量的B子线程进行测试工作。B子线程完成测试工作正常结束返回,这个过程中A和B都没有强制结束线程的操作。子线程A循环检查子线程B的状态,等所有B子线程结束返回后,再进行一定的初始化工作,并重新创建B子线程进行测试工作。
目前遇到一个情况,随着子线程B的创建,在任务管理器中发现句柄数在不停的增加。可以排除子线程B内函数的影响,因为将B子线程的函数里面的语句全部注释掉了,只做一件事return true,占用的句柄数仍在增加。
下面是子线程A中创建和判断子线程B的关键语句,请大神们帮忙看看哪里不对,导致了句柄数不停的增加。
//以下开始创建B子线程和检查B子线程是否结束
LB_STARTTEST;
for (i=0;i<pInfo->m_iThreadNum;i++)
{ // 启动指定数量的子进程
CMyPublicData::thread_vector.push_back(AfxBeginThread(HighCardRandomTest::RandomTestChild,
pInfo,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,0));
CMyPublicData::thread_vector[i]->m_bAutoDelete=FALSE;//为了能检查B线程状态,不让系统自动清理回收资源
CMyPublicData::thread_vector[i]->ResumeThread();
}
::SendMessage(pInfo->hWnd,WM_INFO_RanTest,0,2);
LB_CHECKTHREADSTAT:
for (i=0;i<pInfo->m_iThreadNum;i++)
{
ref=GetExitCodeThread(CMyPublicData::thread_vector[i]->m_hThread,&dwExitCode);
if (dwExitCode==STILL_ACTIVE)
{
goto LB_CHECKTHREADSTAT;
}
}
for (i=0;i<pInfo->m_iThreadNum;i++)
{
//清理B子线程资源 以下各种都试过了,句柄数仍然不停增加,未得到释放
//CloseHandle(CMyPublicData::thread_vector[i]);
//CMyPublicData::thread_vector[i]->m_hThread=NULL;
//CMyPublicData::thread_vector[i]->Delete();
delete CMyPublicData::thread_vector[i];
CMyPublicData::thread_vector[i]=NULL;
}
if (CMyPublicData::b_isStop==TRUE)
{
CMyPublicData::thread_vector.clear();
::SendMessage(pInfo->hWnd,WM_INFO_RanTest,0,1);
return TRUE;
}
j++;
TRACE("\r\n****************已测试轮数%d\r\n",j);
goto LB_STARTTEST;
return TRUE;