我的win32 C ++ DirectX游戏中的计时器有问题(一个小小的演示)。我正在使用“timeGetTime”获取当前时间并使用它来播放动画或逻辑使用增量时间(我还使用常量来设置动画时的标准化)。我有时会使用低至2毫秒的滴定率。我在使用时间时只使用ULONG。游戏运行得很好,但是如果我启动Mozilla Firefox并且我开始玩游戏的速度非常快(动画和游戏逻辑)。这就像快进。奇怪的是,似乎有几个计时器不受此影响。有人有线索吗? Firefox和我的计时器之间有什么联系?退出Firefox后保持不变,但在一些未定义的时间或PC重启后,它恢复正常。任何建议都值得赞赏,即使它是一个长镜头。谢谢。
答案 0 :(得分:3)
是的,TimeGetTIme的默认精度是5ms或更长。
这可以通过调用timeBeginPeriod和timeEndPeriod函数来改变。 交替TimeGetTime的精度会影响所有正在运行的应用程序。 我猜Firefox正在调用那些影响你的应用程序的函数。
更改为使用QueryPerformanceCounter / QueryPerformanceFrequency方法,它们提供高分辨率时序,不会受到TimeGetTime问题的影响。
编辑: 一些链接向您展示如何使用这些功能。
http://www.programmersheaven.com/mb/windows/311148/311148/using-queryperformancecounter/
还要注意MSDN页面上的评论: http://msdn.microsoft.com/en-us/library/ms644904(v=vs.85).aspx