这两天终于解决了一个困扰已久的问题,之前程序一直有资源泄露的问题,本来在GetDC后正常应该ReleaseDC的,但是在线程内的函数DrawDib(BYTE* pData)里面GetDC后ReleaseDC后就根本不显示东西
正确的写法是在调用绘制函数之前GetDC,再将DC传到函数内,之后再ReleaseDC
CDC* pDC = pThis->GetDC();
pThis->DrawDib(pThis->m_pImageData, pDC);
pThis->ReleaseDC(pDC);
原来的写法:
UINT CHDCamViewWnd::__DrawDib(LPVOID lpVoid)
{
CHDCamViewWnd* pThis = (CHDCamViewWnd*)lpVoid;
HANDLE hds[2] ={g_eventDraw , g_eventExit};
while(1)
{
Sleep(1);
DWORD dwRet = WaitForMultipleObjects(2, hds, FALSE, INFINITE);
if(dwRet == WAIT_OBJECT_0)
{
pThis->m_pImageData = theAppVMService.GetImageData();
if(!pThis->m_bStopDib)
{
pThis->DrawDib(pThis->m_pImageData);
}
}
else if(dwRet == WAIT_OBJECT_0 + 1)
{
break;
}
}
return 0;
}