【问题标题】:Executing a method X number of times per second in Java在Java中每秒执行方法X次
【发布时间】:2018-06-06 18:16:10
【问题描述】:

我有一个任务是每秒执行 X 次给定的方法(例如每秒 30 次)。在那个刻度方法中,我应该显示当前速度(基本上显示 FPS)。

我什至不知道如何开始。尝试谷歌搜索,但并没有真正帮助。

【问题讨论】:

  • 那太宽泛了。你已经有游戏循环了吗?调用方法 X 次与显示“当前速度 / FPS”不同——它们基本上是相反的。
  • 这是我掌握的所有信息。它的字面意思是“创建一个在给定时间间隔(例如每秒 30 次)内执行任何方法的程序。该方法应显示当前执行速度(每秒帧数)。
  • 您要查找的方法是System.currentTimeMillis()Thread.sleep(long millis)。要完成您的作业,您需要弄清楚如何使用这些方法。 --- idownvotedbecau.se/noattempt 因为如果不了解完成任务所需的工具,您不太可能获得此任务,所以也许您应该(重新)阅读课程材料。
  • 我投票决定将此问题作为题外话结束,因为“gimme teh codez”。

标签: java methods frame-rate


【解决方案1】:

显示类似“fps”的内容:

public static void main(String[] args) {
    while (true) callMethod();
}

private static long lastTime = System.currentTimeMillis();
public static void callMethod() {
    long now = System.currentTimeMillis();
    long last = lastTime;
    lastTime = now;

    double fps = 1000 / (double)(now - last);
    System.out.println(fps);
}

您可能需要添加一些睡眠,否则两个步骤之间的差异太小,fps 将是“无限”。

每秒 30 次的要求是完全不同的。正如我在评论中所说,这基本上与 fps 完全相反,因为每秒 30 次意味着正好 30 fps,这意味着不需要计算 fps,因为这是最初的要求。

进一步注意,“每秒 30 次”本身通常是一个不好的要求,至少有两个原因:

  • 每秒 1000 次好吗?是否满足要求
  • 在第一个毫秒内运行该方法 30 次,然后等待剩余的 999 毫秒是解决问题的有用方法吗?

【讨论】:

  • 这正是应该做的。我应该更好地阅读材料,这是一个相当简单的解决方案。谢谢
  • 那不是 FPS。这只是一个“帧”的执行时间。
  • @VGR 当然不是 fps,甚至不涉及帧。但这就是我认为 OP 所需要的,忽略稍微偏离的术语
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多