我在给一个自定义的类传递了CVIEW的m_hwnd,以及兼容DC buffDc,但是绘制后休眠了2秒后,发现类中接受m_hwnd和buffDc的变量都变为初始值了,怎么回事?void CProducers::ProduceActive(UINT producerId)
{
//替换状态
buffDc->TransparentBlt(5,64+50*producerId,90,20,srcDc,0,140,90,20,RGB(255,255,255));
buffDc->TransparentBlt(79,60+50*producerId,53,46,srcDc,50,5,53,46,RGB(255,255,255));
clientDc = CWnd::FromHandle(m_hwnd)->GetDC();
clientDc->BitBlt(0,0,rect.Width(),rect.Height(),buffDc,0,0,SRCCOPY);
Sleep(2000); //恢复空闲状态
buffDc->FillSolidRect(CRect(5,64+50*producerId,95,84+50*producerId),RGB(GetRValue(sysColor),GetGValue(sysColor),GetBValue(sysColor)));
buffDc->TransparentBlt(79,60+50*producerId,53,46,srcDc,0,5,53,46,RGB(255,255,255));
clientDc->BitBlt(0,0,rect.Width(),rect.Height(),buffDc,0,0,SRCCOPY);
CWnd::FromHandle(m_hwnd)->ReleaseDC(clientDc);
}这个方法时在threadproc中处理的。

解决方案 »

  1.   

    好像不是休眠的原因
    自定义类中的一个变量保存CVIEW的m_hwnd,传递的是自定义类的this。传的this只是为了在static线程函数中访问成员函数ProduceActive,问题是在CVIEW类中传进来的兼容DC buffDc总是会变成初始状态(也不是百分之百会这样,顺利时能继续执行下去,不过绘制完一次后变0了),我是先把把传进自定义类再创建线程的
    还有就是问了线程之间互斥,我一个线程还没释放mutex尽然有另一个线程进入了。
      

  2.   

    DC有的是临时的DC,这个就是不定时会释放的.......