1
関数を特定の時間ループさせようとすると、関数の実行が完了するまでに約20秒かかることに注意してください。 fooが実行するために20秒かかる場合一定期間関数をループする方法
はlong startTime = System.currentTimeMillis();
long length = 30000;
while(System.currentTimeMillis() - startTime <= length){
foo(); // takes 20 seconds to finish executing
}
はこれで唯一の欠点は、このコードは30で中断されませんされ、そして意志ループ用:
は明らかの線に沿って何かを使用するオプションがありますwhileの前の20秒がfalseであるため、40秒間実行されます。
new SequenceStrategy(NUMBER_FAIRY_LIGHTS, colours).runLightsAlgorithm();
public class SequenceStrategy implements LightsStrategy {
private List<Light> fairyLightsList = new ArrayList<>();
public SequenceStrategy(int numFairyLights, String[] colours) {
for (int i = 0; i < numFairyLights; i += colours.length) {
for (int j = 0; j < colours.length && i + j < numFairyLights; j++) {
fairyLightsList.add(new Light(colours[j], OFF_STATUS, i + j));
}
}
}
public void runLightsAlgorithm() {
for (int i = 0; i < fairyLightsList.size(); i++) {
lightUtilsObject.outputLightMessage(fairyLightsList.get(i).getLightIndex() + 1, fairyLightsList.get(i).getLightColour(), ON_STATUS);
//Thread sleep for 0.5 second after toggling light in sequence
lightUtilsObject.lightToggleWait(500);
lightUtilsObject.outputLightMessage(i + 1, fairyLightsList.get(i).getLightColour(), OFF_STATUS);
lightUtilsObject.lightToggleWait(500);
}
}
}
[XY通報](http://xyproblem.info/)のように聞こえます。 'foo()'の中身は何ですか? – shmosel
ご質問を理論的ではなく、はるかに具体的にしてください。 –
申し訳ありませんが、これは私の最初の投稿ですので、時間の内容でより良くなるでしょう。 とにかくfoo()はThread.sleep()を含むコードで、実行には約20秒かかります。 –