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

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

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

-

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 06 февраля 2010

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

Спекуляция:

  • Возможно, энергосбережение выводит ваш процессор из состояния пониженного энергопотребления. Это ноутбук или в Windows / BIOS включено энергосбережение процессора (я не уверен, где находится настройка)?
  • Как отметил в своем комментарии GMan, возможно, это связано с тем, сколько временных интервалов получает ваше приложение
  • Некоторые функции сна / таймера возвращаются к более низкому разрешению. Примером может служить разница между timeGetTime () и queryPerformanceCounter (): http://www.geisswerks.com/ryan/FAQS/timing.html
0 голосов
/ 06 февраля 2010

Вы можете получить более точную информацию о движении мыши, используя GetMouseMovePointsEx() API.


Sidenote: по какой-то причине я вижу только ваш первый рисунок

...