For-Schleife zählt nicht korrekt?


04.07.2022, 21:50

Ach die TimeHelper Klasse noch, falls das was hilft:

public class TimeHelper {
    private long lastMS = 0L;

    public long getCurrentMS() {
        return System.currentTimeMillis();
    }

    public boolean hasReached(final long milliseconds) {
        return this.getCurrentMS() - this.lastMS >= milliseconds;
    }

    public void reset() {
        this.lastMS = this.getCurrentMS();
    }
}

2 Antworten

Die Schleife zählt garantiert richtig.

Du glaubst, das Programm läuft beim debuggen gleich - falsch.
Es gibt nämlich einen ganz entscheidendes Detail:

Du bist verdammt langsam ;)

Wenn Du das normal ausführst, ist die for-Schleife in unter einer Millisekunde durch.
Wie soll also währenddessen die Zeit um 100 Millisekunden weiter gelaufen sein?

Wenn Du debuggst, bist Du so lahm, dass schon durch nur einen Einzelschritt mehr als 100 Millisekunden vergangen sind.

Woher ich das weiß:Berufserfahrung
lollo939l 
Fragesteller
 04.07.2022, 22:28

Leuchtet ein.

Und wie mache ich dann, dass es an der Stelle wartet (bis 100ms vergangen sind)?

0
Palladin007  04.07.2022, 22:36
@lollo939l

Gar nicht.

Es gibt zwar Thread.sleep(), aber damit würdest Du den Main-Thread blockieren und das willst Du nicht. Eventuell kann man das asynchron machen, aber ich weiß nicht wie.

Merk dir, wann und wo Du zuletzt warst.
Mit jedem Tick machst Du dann da weiter, wo Du vorher warst - zumindest wenn die 100ms vergangen sind.

1

Der Timer läuft weiter und blockiert nicht den Thread, also deine for-Schleife.

Du kannst einen Thread-Pool erzeugen und das Versenden der Nachrichten dahin auslagern. Nach der for-Schleife wartest du, bis der Thread-Pool alle Threads abgearbeitet hat. Erst dann setzt du die weitere Ausführung fort.