API дублирования рабочего стола Windows AcquireNextFrame избегать DXGI_ERROR_WAIT_TIMEOUT - PullRequest
0 голосов
/ 15 февраля 2019

Я сейчас использую API дублирования рабочего стола для записи своего рабочего стола.Я хочу, чтобы он записывал как минимум 30 кадров в секунду.Я заметил, что AcquireNextFrame будет часто возвращать DXGI_ERROR_WAIT_TIMEOUT, если я установлю период времени ожидания равным 33 (33 мс примерно равен 30 FPS), в то время как на экране ничего не происходит (или даже очень мало).Чтобы этого избежать, я рисую пиксель в нижнем левом углу экрана каждые 30 кадров в секунду.Примерно так:

HDC hdc = GetDC(0);
SetPixel(hdc, 0, height, (light_black) ? 0x2 : 0x4);
light_black = !light_black;
ReleaseDC(0, hdc);

На самом деле это работает довольно хорошо, но иногда все равно будет возвращать DXGI_ERROR_WAIT_TIMEOUT, что ухудшает мою производительность.Учитывая, что мое решение этой проблемы немного хакерское, и оно даже не совсем работает, я хотел бы выяснить, как я могу решить эту проблему.Как я могу заставить AcquireNextFrame успешно возвращаться с минимальной скоростью 30FPS?

...