我在Page0这个对话框里建的TemShow六个对话框(创建代码写在page0.cpp里)
  public://page0.h
vector<TemShow*> m_vptemshow1;//vector的变量
TemShow *ptemshow1;//六个对话框变量指针
    TemShow *ptemshow2;
    TemShow *ptemshow3;
TemShow *ptemshow4;
TemShow *ptemshow5;
TemShow *ptemshow6;
 然后创建一个线程,
      DWORD WINAPI Cpage0::Page0Show(LPVOID lpParameter)////page0显示线程
{
Cpage0 *pPage0 = (Cpage0*)(lpParameter);
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if(g_bIsQuit)
{

break;
}
CString sWenDu1 = ("TS1(度)");CString sWenDu2 = ("TS2(度)");CString sWenDu3 = ("TS3(度)");
CString sNiuJiu = ("扭矩(Nm)");CString sWenDu4 = ("TM1(度)");CString sSpeed = ("转速(R/Min)");
pPage0->m_vptemshow1[0]->ShowData(sWenDu1);
pPage0->m_vptemshow1[1]->ShowData(sWenDu2);
pPage0->m_vptemshow1[2]->ShowData(sWenDu3);
pPage0->m_vptemshow1[3]->ShowData(sSpeed);
pPage0->m_vptemshow1[4]->ShowData(sWenDu4);
pPage0->m_vptemshow1[5]->ShowData(sNiuJiu);
        TRACE("page0show successful\n");
Sleep(100);
ReleaseMutex(hMutex);
}
return 0;
}
  1)DEBUG下说vector subscript out of range。可是我int len1 = m_vptemshow1.size();TRACE("len1 = %d",len1);得到len1为6啊,没越界啊!怎么还就内存溢出了呢?
  2)我有多个线程,程序退出时,
线程 'Win32 线程' (0x2370) 已退出,返回值为 0 (0x0)。
线程 'Win32 线程' (0x1610) 已退出,返回值为 0 (0x0)。
线程 'Win32 线程' (0x218c) 已退出,返回值为 1 (0x1)。
返回非0是不是就有问题啊,怎么找到是哪个线程出了问题呢?

解决方案 »

  1.   

    可是我需要在TemShow六个对话框里去动态显示下层收到的数据啊,这个不去线程里弄,我就不知道怎么去让它动态了。
      

  2.   

    第一个问题:
    声明Vector变量后,应该有赋值操作,形式如下:
    vector<TemShow*> m_vptemshow1;
    m_vptemshow1.push_back(0);
    m_vptemshow1.push_back(1);
    ..........
    否则m_vptemshow1仍是一个空向量。第二个问题
    线程的return值一般用处不大,如果你想知道线程为什么退出从哪里退出的话,可以用 
    BOOL   GetExitCodeThread( 
        HANDLE   hThread,             //   handle   to   the   thread 
        LPDWORD   lpExitCode       //   address   to   receive   termination   status 
    ); 
    获得线程的退出值。
    返回非0并不意味着有问题,需要具体分析。 
      

  3.   

    谢谢哈。第一个回答我有赋值的,在
    void Cpage0::CreateDialg(TemShow *&dg,int x,int y,int cx,int cy)
    {
      dg = new TemShow();//调用构造函数
      dg->Create(IDD_TemShow,this);
      dg->SetWindowPos(NULL,x,y,cx,cy,SWP_SHOWWINDOW|SWP_NOREDRAW);
      m_vptemshow1.push_back(dg);//(元素添加到矢量末尾)创建6个对话框}用来创建这六个对话框了。
    第二个回答,你说的这个函数BOOL GetExitCodeThread用在代码哪儿呢?
    谢谢了。