我的一个系统在运行中会出现一个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来关闭???

解决方案 »

  1.   

    或让线程自己删除 m_bAutoDelete
      

  2.   

    线程句柄的消亡并不代表线程的消亡.(摘自:windows 核心编程)
      

  3.   

    void CMainFrame::OnDestroy() 
    {
    //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工具查,它还提示有泄露,想不通是怎么回事????
      

  4.   

    if(::WaitForSingleObject(m_hThread,500)==WAIT_TIMEOUT)
    {
        TerminateThread(m_hThread);
        m_hThread=NULL;
    }
      

  5.   

    TerminateThread + CloseHandle
    注意先后关系
      

  6.   

    你可以可以试着用_CrtDumpMemoryLeaks();http://www.codeguru.com/forum/showthread.php?t=312742
      

  7.   

    可能不一定是thread的问题
    让thread自己运行完自己退出,设置标志让thread中止死循环后退出是比较好的方法而不是执行terminate thread之类看看有没有new的对象或者malloc的内存没有释放
      

  8.   

    程序里很少用new和malloc的,用的,我看了也读用delete处理了。