火狐与我的计时器交互?!(跟踪)

Firefox interacts with my timers ?! (followup)

本文关键字:跟踪 交互 我的 计时器 火狐      更新时间:2023-10-16

首先请阅读我以前的帖子,我认为我已经解决了这个问题。(没有时间就跳过)

火狐以某种方式与我的计时器交互?这太疯狂了^^

对于那些不想阅读的人,我将总结一下:Firefox在运行时弄乱了我的计时器,所以我不得不从timeGetTime()切换到QueryPerformanceCounter(),正如stackoverflow成员所建议的那样。它仍然受到同样的问题(firefox运行使一切都"快进")。我现在不明白为什么。也许我在这里搞砸了:

ULONG CTimer::time()
{
    __int64 temp;
    QueryPerformanceCounter((LARGE_INTEGER*)&temp);
    return (ULONG)(temp*1000/freq);
}
// where freq is the one queried with QueryPerformanceFrequency()

有人知道吗?也欢迎任何提示

如何计算运动?如果您使用QueryPerformanceCounter准确地计算delta-time(从最后一个tick开始的时间),并基于此计算运动,您应该没问题。所以每个物体每一秒移动的距离应该是delttime * speed。

我最好的猜测是你没有这样做,而是基于帧率,当你打开Firefox时帧率会改变(无论出于什么原因)。展示你的代码会很有帮助。

还有一件事- QueryPerformanceCounter/Frequency对于不同的内核可能是不同的-你的应用程序是多线程的吗?如果是这样,打开Firefox可能会导致Windows将您的应用程序转移到执行不同的核心,其中QueryPerformanceCounter/Frequency是不同的。您必须确保始终从同一个处理器核心调用它们(在调用它们的线程上设置处理器关联)。

Firefox本身不会乱搞高性能计时器,所以setInterval等东西的结果取决于其他东西,如Google Chrome,是否这样做。