有计时器程序如下:
void CVQView::OnTimer(UINT nIDEvent) 
{
DWORD dwCode;
m_lTimeOut += 2;
if(::GetExitCodeThread(m_pThread->m_hThread,&dwCode))
{
if(dwCode != STILL_ACTIVE)
{
delete m_pThread;
m_pThread = AfxBeginThread(RealTimeShowCurve,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
m_pThread->m_bAutoDelete = FALSE;
m_pThread->ResumeThread();
m_lTimeOut = 0;
}
else
{
// 查看是否超时
if(m_lTimeOut > WAITSENCOND_THREADNOTACTIVE)
{
// 超时,强行中止
TerminateThread(m_pThread,-1);
delete m_pThread;
m_pThread = AfxBeginThread(RealTimeShowCurve,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
m_pThread->m_bAutoDelete = FALSE;
  m_pThread->ResumeThread();
m_lTimeOut = 0;
}
else
{
// 没有超时
}
}
}
CFormView::OnTimer(nIDEvent);
}
在计时器里创建了一个线程,程序运行时有时要出错,不知道什么原因

解决方案 »

  1.   

    "0x5f47b16c"指令引用的"0xddddde59"内存。该内存不能为"read"
      

  2.   

    推断:delete m_pThread;为什么要delete ?????
    在你这里m_pThread指是一个指针而已,他指向的内存是由操作系统为线程分配的,线程函数如果正常退出,这块内存会由操作系统自动回收,这时候你的m_pThread将指向一块无效内存
    这时候你delete 会出现什么后果,你自己也应该知道吧