在 VMWare 中,BitBlt() 有时对于一个像素需要很长时间(400 毫秒或更长)

pet*_*ete 6 c++ winapi bitblt

关于如何提高BitBlt()在 VMware 中运行时的可靠性有什么想法/解决方法吗?我有一个计时器来测量所花费的时间:

SmartTimer debugTimer = SmartTimer();
debugTimer.restart();
int ms1 = debugTimer.elapsedTimeMs();
POINT origin = { rect.left, rect.top };
int ms2 = debugTimer.elapsedTimeMs();
ClientToScreen(win_hwnd, &origin);
int ms3 = debugTimer.elapsedTimeMs();
BitBlt(hMemoryDC, 0, 0, (rect.right - rect.left) + 1, (rect.bottom - rect.top) + 1, hScreenDC, origin.x, origin.y, SRCCOPY); // SRCCOPY
int ms4 = debugTimer.elapsedTimeMs();
if (ms1 > 150 || ms2 > 150 || ms3 > 150 || ms4 > 150) {
    logs(std::format("getPixelData took very long: {} {} {} {}", ms1, ms2, ms3, ms4));
}
Run Code Online (Sandbox Code Playgroud)

我在日志中观察到,它经常显示“0, 0, 0, 420”(或类似的),表明BitBlt()花了很长时间,即使我只有BitBlt()一个像素的情况也是如此。

我知道对于读取一个像素,有GetPixel(),但由于某种原因,这对我来说在读取游戏时是非常错误的。它有时会获取255, 255, 255所有内容的像素值,但是当我切换到 时BitBlt(),错误就不再发生了。

看起来BitBlt()通常很快,但有时却很慢。