Files
VisualForecast-1000/src/com/flaremicro/visualforecast/TickThread.java
Flare Microsystems 0564334f93 Added providers
2024-03-07 14:12:38 -08:00

51 lines
1.1 KiB
Java

package com.flaremicro.visualforecast;
import java.util.concurrent.locks.LockSupport;
import com.flaremicro.visualforecast.interfaces.Tickable;
public class TickThread implements Runnable {
private final Tickable tickable;
private boolean running = true;
private final long sleepNanos;
//private long nextTick = 0;
TickThread(Tickable tickable, long sleepNanos) {
this.tickable = tickable;
this.sleepNanos = sleepNanos;
}
TickThread(Tickable tickable, int ticksPerSecond) {
this(tickable, (long) ((1/(double)ticksPerSecond) * 1000000000L));
}
public void end() {
this.running = false;
}
public void run() {
long nanosLost = 0;
while (running) {
/*while(System.nanoTime() < nextTick)
{
try
{
Thread.sleep(1);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
nextTick = System.nanoTime() + sleepNanos;
tickable.tick();*/
tickable.tick();
nanosLost -= System.nanoTime();
//Unnecessary conditional?
//if(sleepNanos+nanosLost > 0)
LockSupport.parkNanos(sleepNanos+nanosLost);
nanosLost = System.nanoTime();
}
}
}