我想计算我的程序的FPS。尽管给定的最大FPS超出范围,我无法解释原因。我用MAX_FPS
设置为60
进行测试,我总是得到约63
显示。超过最大FPS
{...}
int frameCount = 0;
long time = System.currentTimeMillis();
while(running) {
try {
{...} // do something
Thread.sleep(1000/MAX_FPS);
frameCount++;
if (System.currentTimeMillis() - time >= 1000) {
{...} // display FPS w/ frameCount
frameCount = 0;
time = System.currentTimeMillis();
}
} catch (InterruptedException ex) {
System.err.println(ex.toString());
}
}
{...}
1000/60在整数数学中为16,而1000/16大致为62.5。假设线程也睡了接近16毫秒(也许少一些),如果你的循环不会花这么长时间执行迭代,如果在999毫秒倒数第二帧成为通过允许另一个更新忙里偷闲,那么这个循环经常可以每秒达到63次迭代是有意义的。编辑:我只是做出这个答案。 – NESPowerGlove 2015-02-09 22:57:38
@Astraioz - 你肯定需要'1_000_000_000'几纳秒? (或者使用'TimeUnit'做转换) – 2015-02-09 23:13:29