我的一个系统在运行中会出现一个afxwin1.inl line22错误,朋友说是内存泄露,我用一个TurboPower工具查了一下,有63个泄露,它提示的文件中很多是系统文件,我都不知道如何来解决这些问题;还有我有一个线程,是用AfxBeginThread创建的,提示这几个都有内存泄露:
m_MinProc = AfxBeginThread((AFX_THREADPROC)MinProc,NULL,THREAD_PRIORITY_NORMAL); //分钟处理线程
m_QxProc = AfxBeginThread((AFX_THREADPROC)QxProc,NULL,THREAD_PRIORITY_NORMAL); //曲线处理线程
m_HourProc = AfxBeginThread((AFX_THREADPROC)HourProc,NULL,THREAD_PRIORITY_NORMAL);//小时处理线程
m_DayProc = AfxBeginThread((AFX_THREADPROC)DayProc,NULL,THREAD_PRIORITY_NORMAL);//日处理线程
m_MonthProc = AfxBeginThread((AFX_THREADPROC)MonthProc,NULL,THREAD_PRIORITY_NORMAL);//月处理线程
m_YearProc = AfxBeginThread((AFX_THREADPROC)YearProc,NULL,THREAD_PRIORITY_NORMAL);//年处理线程
上面的m_MinProc是不是应该用AfxEndThread来关闭???
m_MinProc = AfxBeginThread((AFX_THREADPROC)MinProc,NULL,THREAD_PRIORITY_NORMAL); //分钟处理线程
m_QxProc = AfxBeginThread((AFX_THREADPROC)QxProc,NULL,THREAD_PRIORITY_NORMAL); //曲线处理线程
m_HourProc = AfxBeginThread((AFX_THREADPROC)HourProc,NULL,THREAD_PRIORITY_NORMAL);//小时处理线程
m_DayProc = AfxBeginThread((AFX_THREADPROC)DayProc,NULL,THREAD_PRIORITY_NORMAL);//日处理线程
m_MonthProc = AfxBeginThread((AFX_THREADPROC)MonthProc,NULL,THREAD_PRIORITY_NORMAL);//月处理线程
m_YearProc = AfxBeginThread((AFX_THREADPROC)YearProc,NULL,THREAD_PRIORITY_NORMAL);//年处理线程
上面的m_MinProc是不是应该用AfxEndThread来关闭???
{
//2005.3.15
CloseHandle(m_MinProc->m_hThread);
CloseHandle(m_QxProc->m_hThread);
CloseHandle(m_HourProc->m_hThread);
CloseHandle(m_DayProc->m_hThread);
CloseHandle(m_MonthProc->m_hThread);
CloseHandle(m_YearProc->m_hThread);
...................}
我用了上面的语句,用TurboPower工具查,它还提示有泄露,想不通是怎么回事????
{
TerminateThread(m_hThread);
m_hThread=NULL;
}
注意先后关系
让thread自己运行完自己退出,设置标志让thread中止死循环后退出是比较好的方法而不是执行terminate thread之类看看有没有new的对象或者malloc的内存没有释放