Я протестировал ваш код, используя функции счетчика производительности, как показано ниже:
void CMainFrame::OnTestTest()
{
LARGE_INTEGER lFreq, lStart, lEnd;
::QueryPerformanceFrequency(&lFreq);
::QueryPerformanceCounter(&lStart);
/// BEGIN BENCHMARK ///
int nScreenWidth = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = ::GetSystemMetrics(SM_CYSCREEN);
HWND hDesktopWnd = ::GetDesktopWindow();
HDC hDesktopDC = ::GetDC(hDesktopWnd);
HDC hCaptureDC = ::CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap = ::CreateCompatibleBitmap(hDesktopDC,nScreenWidth, nScreenHeight);
::SelectObject(hCaptureDC,hCaptureBitmap);
::BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight, hDesktopDC,0,0,SRCCOPY|CAPTUREBLT);
::ReleaseDC(hDesktopWnd,hDesktopDC);
::DeleteDC(hCaptureDC);
/// END BENCHMARK ///
::QueryPerformanceCounter(&lEnd);
double dTime = ((double)lEnd.QuadPart - lStart.QuadPart) / lFreq.QuadPart;
// ..
}
Полученное время составило около 80 микросекунд .
Я не думаю, что ваш компьютер невероятно медленный. Возможно, проблема в другой стороне (например, в вопросе синхронизации потоков).