在网上查到一段代码如下:
void CScope::AddValue(double dTime,double dValue)
{
if(m_bDrawing)
return; m_TimeList.push_back(dTime);
m_ValueList.push_back(dValue);
std::list<double>::iterator start_it = m_TimeList.begin();
std::list<double>::iterator end_it = m_TimeList.end();
end_it--;
double dStartTime = *start_it;
double dEndTime = *(end_it);
while(dEndTime-dStartTime>4*m_dDimT)
{
m_TimeList.pop_front();
m_ValueList.pop_front();

start_it = m_TimeList.begin();
end_it = m_TimeList.end();
end_it--; dStartTime = *start_it;
dEndTime = *(end_it);
}
 
}另外在我的程序中添加了一个线程执行以下功能:
UINT Test45Dlg::ReceiveWaveDataThread(LPVOID v)
{
Test45Dlg *dlg=(Test45Dlg*) v;
while(1)
{
::WaitForSingleObject(ThreadWaveTrans.m_hObject,INFINITE);  //在进行波形检测的时候不执行该操作
ThreadWaveTrans.SetEvent(); double dTime = ::timeGetTime()/1000.0;
double dValue[3];
dValue[0] = 400*sin(dTime+2);
dlg->m_wndscope.AddValue(dTime,dValue[0]);
dlg->m_wndscope.SetValue(dValue[0]);
  dlg->m_wndscope.UpdateCurve();
Sleep(50);
}
}
m_wndscope是CScope的一个实例,Test45Dlg是我在点击主窗口Maindlg的一个按钮时弹出的窗口Test45Dlg,当我第一次点击按钮时Test45Dlg可以正常执行,而把Test45Dlg关闭之后,再点击按钮进入该Test45Dlg时就会出现vector iterator not dereferencable的问题。而我不通过线程而是定时器的方法时就没有这样的问题。
不知道我的问题有没有说清楚