Координаты мыши отстают, если загрузка процессора не 100% - действительно странно!

Когда я заставляю свою программу использовать только 0-2% процессора (удалены некоторые функции opengl, интенсивно использующие процессор), мои координаты мыши начинают отставать! и когда я использую 100% ЦП (при включении функции opengl), я получаю хорошие и плавные координаты мыши, обратите внимание, что функция opengl ничего не делает с моими координатами мыши. посмотрите на изображение ниже, я записал свои значения функции вращения, используя координаты мыши:

Это при 100% загрузке процессора (как должно выглядеть): http://img15.imageshack.us/img15/1304/mousecursorsmoothcoords.png

-

Это при загрузке процессора на 2%: http://img5.imageshack.us/img5/5514/mousecursorlaggedcoords.png

Это действительно раздражающая проблема, потому что я использую положение курсора мыши для изменения угла поворота, и в случае с приведенным выше изображением это выглядит очень запаздывающим вращением.

Я мог бы сделать собственную интерполяцию или что-то в этом роде, но я хочу знать, что вызывает это и как это исправить.

Я получаю координаты мыши с сообщением WM_MOUSEMOVE, и я также пытался использовать GetCursorPos() в каждом кадре до моего кода поворота, но это не имеет никакого значения.

Редактировать: я заметил, что загрузка ЦП не обязательно должна быть 100%, чтобы добиться плавной работы, но ЦП просто нужно «разбудить», и тогда он останется гладким даже при низкой загрузке ЦП.


person Newbie    schedule 06.02.2010    source источник
comment
Возможно, при включенном OpenGL Windows уделяет больше внимания вашему приложению.   -  person GManNickG    schedule 06.02.2010


Ответы (2)


Ваш второй график выглядит так, как будто он «группирует» обновления. Скачки по оси Y кажутся с фиксированной частотой по оси X.

Спекуляция:

  • Возможно, энергосбережение переводит ваш процессор в режим пониженного энергопотребления. Это ноутбук или энергосбережение процессора включено в Windows/BIOS (я не уверен, где эта настройка)?
  • Как предположил GMan в своем комментарии, возможно, это связано с тем, сколько временных интервалов получает ваше приложение.
  • Некоторые функции сна/таймера возвращаются к более низкому разрешению. Примером может служить разница между timeGetTime() и queryPerformanceCounter(): http://www.geisswerks.com/ryan/FAQS/timing.html
person Merlyn Morgan-Graham    schedule 06.02.2010
comment
Да, и кажется, что у него одна и та же координата в двух последовательных кадрах, хотя это не должно быть. Графики представляют движение моей мыши по оси x, поэтому на этом изображении графика ось x — это время, прошедшее при перемещении моей мыши, а ось y — записанные значения по оси x. У меня нет сна / таймера, я также отключил код v-sync (поэтому он использует только vsync моей карты GFX), и это не имеет значения. - person Newbie; 06.02.2010
comment
Я не понимаю, что сказал GMan с поддержкой opengl. Отставание появляется, когда opengl включен... поскольку в моем приложении есть только элементы opengl, но единственная переменная - это использование ЦП, я начинаю думать, что это может иметь какое-то отношение к энергосбережению, поскольку мой ЦП действительно имеет возможности энергосбережения. Могу ли я каким-то образом солгать своему процессору, чтобы он использовал полную мощность? - person Newbie; 06.02.2010
comment
О, и это не ноутбук, настольный компьютер с Intel Core 2 Quad Q6600, я не знаю, как отключить энергосбережение, и я действительно не хочу, так как он мог бы перегреться, если бы он использовал все ядра одновременно на полную мощность в течение всего дня. ... и это не очень хорошее решение проблемы, если мне придется говорить каждому пользователю делать это вручную. - person Newbie; 06.02.2010
comment
«Я не понимаю, что GMan сказал о включении opengl» в отношении вашего утверждения «при включении функции opengl». Не могли бы вы опубликовать код? Это может помочь помимо наших предположений. В частности, если вы можете получить туда код мыши и какой-то код (не обязательно ваш исходный блок), который повысит нагрузку на ЦП до 100% и заставит мышь плавно работать. - person Merlyn Morgan-Graham; 08.02.2010
comment
у меня такая же проблема и с другими моими приложениями opengl, и я не использую тот же код для увеличения процессора до 100%, просто когда я начинаю отправлять больше данных на графический процессор, мой процессор становится диким и начинает использовать 100% одного ядра ( иногда два ядра), и тогда моя мышь работает плавно. я попробую эту функцию GetMouseMovePointsEx(), упомянутую Майклом Берром ниже. - person Newbie; 10.02.2010