java - 如何在循环中以完全相同的时间间隔调用方法?

标签 java time fixed

在Java中,我有一个循环调用一个方法,然后该方法有一个sin,它将自程序执行以来的时间作为参数。该循环以每秒 60 次更新的速度运行(预期变化为 +-1 或 2 ups)。我想要做的是在该循环中调用一个方法,但该方法必须每隔 0.2, 0.4... 秒(固定间隔)调用一次,所以我所做的是: if(executionTime % 200 == 0) 但这还不够,因为它并不总是准确的,所以它跳过了很多次。为此,我尝试了 if(executionTime % 200 <= 50)试图限制它,但它仍然跳过了几次,但比以前少了。所以我的问题是,是否有任何方法可以让它精确地在 0.2 秒运行,并提供以下详细信息:

  • 如果循环一次迭代的时间超过 0.2 秒,则调用该方法。
  • 如果花费的时间少于 0.2 秒,我不确定,因为如果是 30 毫秒,那么显然不是,但如果是 198 毫秒,那么是的,但幅度很小。

我使用的方法是使用一个变量来调用 sin,该变量每次调用该方法时都会增加某个数字(这是必须每 200 毫秒调用该方法的地方)。本质上,我想做一些类似于绘制依赖于时间(X)的函数的操作,其中 X 每 200 毫秒的循环迭代增加相同的数字。因此,每次循环迭代,每 200 毫秒计算一次图形的新点。我可以做的是在每次调用循环中的其他方法之前检查是否是时候调用此方法,但这会破坏循环的顺序。我四处寻找,但只能找到日程安排,我相信这并不能做到这一点。

编辑:伪代码:

int increment;

while(running){
    first();
    second();

    if(condition)
        doSomething();
    if(timeCheck) // time check every 200ms; this is what I don't know how to do
        graphfunction(increment);
}

最佳答案

我会使用java.util.concurrentExecutorService。看看Javadoc 。在该对象上使用以下方法

ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) 

Java 文档:

Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given period; that is executions will commence after initialDelay then initialDelay+period, then initialDelay + 2 * period, and so on.

关于java - 如何在循环中以完全相同的时间间隔调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903441/

相关文章:

css - 如何将固定和相对与宽度 100% 结合起来

java - 用于在多个不同的 javac 任务中指定源/版本的 Ant 快捷方式

Java 事务 API (JTA) 概述帮助

html - 粘性导航和移动响应

javascript - 如何使用时间戳 Dexie.js 而不是日期搜索在 2 小时或更短时间后删除 indexedDB

c - C 中的 time(NULL) 是什么?

html - 固定按钮上的小可点击区域

java - 环绕网格错误 - 仅减法?

Java 游戏无法仅在 CMD 中在 Java 中启动

c++代码执行定时器返回0,需要以毫秒为单位输出