大家好。我想请教大家一个多线程的问题:我自己定义了一个绘图类。并在该类中启动一个线程。这个线程我是在类的构造函数中创建的。再debug模式下编译通过没有问题,运行也正常。但是在退出程序的时候程序会报错。请问高手们这是怎么回事

解决方案 »

  1.   

    首先是问题描述得太含糊了。
    其次,在工作线程中处理绘图本就有问题。因为大多数MFC类都用到了线程局部存储(TLS)的map。
      

  2.   

    DWORD CALLBACK DrawWaveThread(PVOID pParma)//线程函数
    {
      CDrawWaveClass *p = (CDrawWaveClass*)pParma;  //CDrawWaveClass为我自己定义的绘图类
      while(!p->m_Terminated)
      {
        WaitforsingnalEvent(.....);
        p->DrawWave(p->GetDC()) ;              //DrawWave为CDrawWaveClass中的公共成员函数
        p->ReleaseDC();
      }
    }
    CDrawWaveClass::CDrawWaveClass()//构造函数
    {
      ...
      ...
      m_hThreadEvent = CreateEvent(...);//创建信标
      m_hThread = CreateThread(NULL,0,DrawWaveThread,this,0,NULL);//创建线程
    }
    CDrawWaveClass::~CDrawWaveClass()//析构函数
    {
      m_Terminated = TRUE;
      if(m_hThreadEvent)
        SetEvent(CDrawWaveClass);
      Sleep(50);
      if(hThread)
      {
        CloseHandle(hThread);
        hThread = NULL;
      }

    然后在对主话框中定义一个CDrawWaveClass对象,这样CDrawWaveClass在实例化的时候就完成了创建线程。并启动线程的工作。这样的话在Debug模式下编译能够通过。并且运行也正常。但是在关闭程序的时候,也就是程序窗口已经销毁(消失)之后。他会弹出一个“程序错误”对话框。