0

我需要在屏幕上显示一个精确的、非常小的时间间隔。必须使用具有固定(并且对于此任务相对较慢)刷新率的显示器,这将是限制因素 - 我将不得不允许用户以多个“帧”(= 16, (6)ms 用于 60Hz 显示器)。

我最初考虑只使用精确计时器(基于秒表类),但问题是,没有办法(据我所知)找出实际显示了多少帧 - 所以如果我显示一些东西,比如 21 毫秒,我有实际显示 2 帧 (33,3ms) 的几率约为 25%,显示 1 帧 (16,6ms) 的几率约为 75%,具体取决于刷新 16,6ms 间隔如何与我的21ms 间隔。

我知道这可能可以通过 directX/opengl/etc 中的 Vsync 来完成,但如果可能的话,我想使用简单的 Windows 表单。那么,有没有办法找出从一段时间以来已经显示了多少帧,或者拦截在监视器上绘制新帧的事件,或者手动订购帧重绘或类似的东西?

4

1 回答 1

1

目前尚不清楚“监视器框架”是什么意思。

如果要测量显示器刷新率,则无需测量太多。这是一个固定数字,完全取决于显示器型号和显示设置。您可以查找它或使用 win api 调用以编程方式获取它:http: //msdn.microsoft.com/en-us/library/dd162611%28v=VS.85%29.aspx。刷新率不受您的软件影响。

如果你想测量 fps,那么你需要一个计时器(例如StopWatch)和一个帧数。您可以通过在每次刷新屏幕时增加一些变量来获得后者。OnPaint您的表单中的方法可能是您可以做到这一点的地方之一。FPS 不受显示器影响(除非您启用 VSync)。

如果要测量 fps,不包括由于刷新率慢而跳过的帧...那么我认为可以安全地假设,如果刷新率低于 fps,则该值等于刷新率,如果刷新率则等于 fps高于fps。

于 2013-10-28T11:30:32.183 回答