首先请阅读我认为我修复过的旧帖子。 (如果你没有时间,请跳过)
Firefox interacts with my timers somehow ?!?! This is crazy ^^
对于那些不想阅读的人,我只想总结一下:Firefox在运行时会弄乱我的计时器,所以我必须按照stackoverflow成员的建议从timeGetTime()切换到QueryPerformanceCounter()。它仍然遇到同样的问题(Firefox运行使一切'快速转发')。我现在不明白为什么。也许我在这里弄得一团糟:
ULONG CTimer::time()
{
__int64 temp;
QueryPerformanceCounter((LARGE_INTEGER*)&temp);
return (ULONG)(temp*1000/freq);
}
// where freq is the one queried with QueryPerformanceFrequency()
有人有任何想法吗?欢迎任何提示。
答案 0 :(得分:1)
你是如何计算运动的?如果您使用QueryPerformanceCounter准确计算delta-time(自上次打勾以来的时间),并根据该计算运动,那么您应该没问题。因此,每个对象每个刻度移动的距离应为deltatime * speed。
我最好的猜测是你没有这样做,而是基于帧速率,当你打开Firefox(无论出于何种原因)时帧率会发生变化。显示您的代码会很有帮助。
还有一件事 - QueryPerformanceCounter / Frequency对于不同的内核可能会有所不同 - 您的应用程序是多线程的吗?如果是这样,打开Firefox可能会导致Windows将您的应用程序转移到执行不同的核心,其中QueryPerformanceCounter / Frequency是不同的。您必须确保始终从同一处理器核心调用它们(在调用它们的线程上设置处理器关联)。
答案 1 :(得分:0)
Firefox本身并没有使用高性能计时器,因此setInterval之类的结果取决于是否有其他东西,例如谷歌浏览器。