首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gameboy模拟器的播放速度比预期快。

Gameboy模拟器的播放速度比预期快。
EN

Stack Overflow用户
提问于 2015-07-18 19:44:05
回答 1查看 413关注 0票数 5

我正在尝试做一个游戏仿真器,但它的播放速度比它应该更快。

这是我在主循环中使用的计时代码。

代码语言:javascript
复制
if (cpu.T >= CLOCKSPEED / 40) // if more than 1/40th of cycles passed
{
    // Get milliseconds passed
    QueryPerformanceCounter(&EndCounter);
    unsigned long long counter = EndCounter.QuadPart - LastCounter.QuadPart;
    MSperFrame = 1000.0f * ((double)counter / (double)PerfCountFrequency);
    LastCounter = EndCounter;

    // if 1/40th of a second hasn't passed, wait until it passes
    if (MSperFrame < 25)
        Sleep(25 - MSperFrame);
    MSperFrame = 0;
    cpu.T -= CLOCKSPEED / 40;
}
  • CLOCKSPEED是游戏程序cpu (4194304)每秒的周期。
  • 到目前为止,cpu.T是经过循环的。
  • PerfCountFrequency是我在进入循环之前调用的QueryPerformanceFrequency的结果。

当我将它与以正确速度播放的另一个模拟器(VBA)进行比较时,我的仿真器运行得更快。这里有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-21 05:50:10

睡眠在这里是错误的。在https://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx中,它提到“如果dwMilliseconds小于系统时钟的分辨率,线程的睡眠时间可能小于指定的时间长度”。

DirectX可能有一个方法(VBLANK??),但是您可以通过计算下一个帧的时间来解决一些小问题,如果睡眠太小,则将睡眠保存到超出定时器分辨率为止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31494913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档