如果CPU使用率不是100%,鼠标坐标会滞后 - 真的很奇怪!

时间:2010-02-06 01:52:48

标签: c++ windows opengl mouse-cursor

当我让我的程序只使用0-2%cpu(删除了一些CPU密集型opengl函数)时,我的鼠标坐标开始滞后!当我使用100%CPU时(启用opengl功能时)我得到漂亮而流畅的鼠标坐标,请注意opengl函数对我的鼠标坐标没有任何作用。看下面的图像我用鼠标坐标记录了我的旋转函数值:

这是100%的CPU使用率(应该看起来): no lag http://img15.imageshack.us/img15/1304/mousecursorsmoothcoords.png

-

这是2%的CPU使用率: lag http://img5.imageshack.us/img5/5514/mousecursorlaggedcoords.png

这真是烦人的问题,因为我使用鼠标光标位置来改变旋转角度,并且在上面的图像情况下,它看起来真的是滞后旋转。

我或许可以进行插值或其他操作,但我想知道导致这种情况的原因以及解决方法。

我正在使用WM_MOUSEMOVE消息获取鼠标坐标,并且我还尝试在旋转代码之前的每一帧上使用GetCursorPos(),但它没有区别。

编辑:我注意到CPU使用率不必100%才能顺利进行,但CPU只需要“唤醒”即使CPU使用率很低也能保持平稳。

2 个答案:

答案 0 :(得分:1)

您的第二张图表似乎是“聚合”更新。 Y轴上的跳跃似乎在X轴上处于固定频率。

猜测:

  • 也许省电会让您的CPU进入低功耗状态。这是笔记本电脑,还是在Windows / BIOS中启用CPU省电(我不确定设置在哪里)?
  • 正如GMan在他的评论中所说,也许这与你的应用程序获得了多少次点数有关
  • 某种睡眠/定时器功能正在回归到较低的分辨率。一个例子是timeGetTime()和queryPerformanceCounter()之间的区别: http://www.geisswerks.com/ryan/FAQS/timing.html

答案 1 :(得分:0)

您可以使用GetMouseMovePointsEx() API获取有关鼠标移动的更多信息。


旁注:出于某种原因,我只能看到你的第一张图片