void CDomainG::OnTimer(UINT nIDEvent) 
{
  MyDefStr glTagMsg[100000];

// TODO: Add your message handler code here and/or call default
CEdit *CEXECUTE_TIME=(CEdit*)GetDlgItem(IDC_EDIT_EXECUTE_TIME);
CTime time=CTime::GetCurrentTime();
CEXECUTE_TIME->SetWindowText(time.Format("%Y-%m-%d %H:%M:%S"));    if(theApp.m_CONDITIONS=="现在执行")
{
      
     if(thDomain=="1"){
      thDomain="0";
       for(int i=0;i<=DomainName_c;i++){
Domain_i++;
glTagMsg[i].pDlg=this;
            glTagMsg[i].DomainName_c_i=i;
      
CWinThread* pThread = AfxBeginThread(MyThread,&glTagMsg[i],THREAD_PRIORITY_IDLE);
   // pThread->ResumeThread();
}
  
  }
}else{
   if(thDomain=="1"&&time.Format("%H:%M:%S")>theApp.m_starttime&&time.Format("%H:%M:%S")<theApp.m_overtime){
   // thDomain="0";
    for(int i=0;i<=DomainName_c;i++){
Domain_i++;
glTagMsg[i].pDlg=this;
            glTagMsg[i].DomainName_c_i=i;
CWinThread* pThread = AfxBeginThread(MyThread,&glTagMsg[i],THREAD_PRIORITY_IDLE);
    //pThread->ResumeThread();
}
  
   }
}
CDialog::OnTimer(nIDEvent); 
}运行时间过长的个话会出错.什么解决.但如果是直接关闭窗口什么让这些现成关闭掉

解决方案 »

  1.   

    指针没有释放
    将pThread做成全局或者类成员,每次新开线程前判断pThread是否为NULL,否则关闭线程释放再开
      

  2.   

    CWinThread* pThread = AfxBeginThread(MyThread,&glTagMsg[i],THREAD_PRIORITY_IDLE); glTagMsg有必要开这么大的数组吗?
    还有,pThread得在某个地方释放
      

  3.   

    我认为原因在:
    MyDefStr glTagMsg[100000]; 他是个局部变量,当执行完OnTimer(UINT nIDEvent),它就失效了。如果此时你的线程再使用glTagMsg肯定出问题。根据需要,把它定义成类成员变量或全局变量。