【发布时间】:2014-01-03 22:14:57
【问题描述】:
在 Java 中,我有一个调用方法的循环,然后该方法有一个 sin,它将自程序执行以来的时间作为参数。该循环以每秒 60 次恒定更新运行(预期变化为 +-1 或 2 次以上)。我想做的是在该循环中调用一个方法,但是该方法必须每 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);
}
【问题讨论】:
-
你试过线程吗?在此处粘贴您的代码..
-
我没有尝试过 Thread,因为我还不熟悉它的线程,但是由于线程可能不会并行运行,这不会让它变得不可预测吗?
-
删除 50% 的文本并将其替换为循环的实际代码。
-
为什么不只是
if (200 - exceutionTime > 0) { Thread.sleep(200 - exceutionTime) }? -
@MarkoTopolnik 我一直在从 C++ 切换到 Java,还没有真正的代码,但我会写一个伪代码。