В моем приложении я получаю DC, используя GetDC, и также освобождаю этот DC, используя ReleaseDC.
Но когда я профилирую свое приложение с помощью VTune, он показывает GDIResource Leak в GetDC.
m_hdc = ::GetDC(hWndDisplay[frameIndex]);
::SetStretchBltMode(m_hdc,STRETCH_DELETESCANS);
::StretchDIBits(m_hdc,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,0,0,imageWidth,imageHeight,rgbavpg,pTempBmpInfo,DIB_RGB_COLORS,SRCCOPY);
::ReleaseDC(hWndDisplay[frameIndex],m_hdc);
Ниже приведен соответствующий код: m_hdc id, глобально определенный как HDC m_hdc;
void Display(unsigned char *rgbavpg,unsigned long imageSize, unsigned int imageWidth, unsigned int imageHeight, unsigned int frameIndex)
{
PBITMAPINFO pTempBmpInfo = NULL;
DWORD timespan;
int temp;
if ((IMAGE_WIDTH==imageWidth)&&(IMAGE_HEIGHT==imageHeight))
{
frameNum++ ;
}
timespan = 1000/15;
DWORD diff = GetTickCount() - tickes[frameIndex];//lvm4;
tickes[frameIndex]=GetTickCount();
if (g_threadMarkedForStop[frameIndex] == TRUE )
{
return;
}
if(diff < timespan)
{
Sleep(diff);
}
if (FALSE == ::IsWindow(hWndDisplay[frameIndex]))
{
g_threadMarkedForStop[frameIndex] = TRUE
return;
}
pTempBmpInfo = &m_bmpinfo[frameIndex];
if(pTempBmpInfo != NULL)
{
pTempBmpInfo->bmiHeader.biWidth= imageWidth ;
pTempBmpInfo->bmiHeader.biHeight= imageHeight;
}
else
{
g_threadMarkedForStop[frameIndex] = TRUE;
return;
}
m_hdc = ::GetDC(hWndDisplay[frameIndex]);
::SetStretchBltMode(m_hdc,STRETCH_DELETESCANS);
if (true == fullscreen) ::StretchDIBits(m_hdc,0,0,510,320,0,0,imageWidth,imageHeight,rgbavpg,pTempBmpInfo,DIB_RGB_COLORS,SRCCOPY);
else
{ ::StretchDIBits(m_hdc,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,0,0,imageWidth,imageHeight,rgbavpg,pTempBmpInfo,DIB_RGB_COLORS,SRCCOPY);
//::SetDIBitsToDevice(m_hdc,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,0,0,0,imageHeight,rgbavpg,pTempBmpInfo,DIB_RGB_COLORS);
}
::ReleaseDC(hWndDisplay[frameIndex],m_hdc);
}
Пожалуйста, помогите мне решить эту проблему.