51 lines
1.1 KiB
Java
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();
|
|
}
|
|
}
|
|
} |