M
Mr. S
Gast
Hallo!
Ich brauche für ein Program ein präzises Timing, welches mit wechselnden Lasten klar kommen muss. Ich brauche einen Start der Lastrechnung alle 50 ms. Wenn die Rechnung mehr als 50 ms dauert muss das nächste Intervall kürzer werden, wenn die Rechnung schneller fertig ist soll die Restzeit gewartet werden. Im folgenden ist das erste Programm zu sehen:
Mit einem Random-Sleep simuliere ich erst einmal die Last. Die Leistung ist allerdings nicht so prickelnd, recht ungenau das Ganze. Hat jemand Verbesserungsvorschläge?
Ich brauche für ein Program ein präzises Timing, welches mit wechselnden Lasten klar kommen muss. Ich brauche einen Start der Lastrechnung alle 50 ms. Wenn die Rechnung mehr als 50 ms dauert muss das nächste Intervall kürzer werden, wenn die Rechnung schneller fertig ist soll die Restzeit gewartet werden. Im folgenden ist das erste Programm zu sehen:
Java:
public class Program {
public static long INTERVALL = 50;
public static void main(String[] args) {
Program p = new Program();
try {
p.run(args);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(String[] args) throws Exception {
long start = System.nanoTime();
long timeNanos, timeMillis, diff;
for (int i=0; i<25; i++) {
/* + Last + */
int rand = (int)((Math.random()) * 60 + 10);
Thread.sleep(rand);
/* - Last - */
timeNanos = System.nanoTime();
timeMillis = (timeNanos - start) / (1000 * 1000);
diff = (i + 1) * INTERVALL - timeMillis;
if (diff > 0) Thread.sleep(diff);
long temp = (i + 1) * INTERVALL - (System.nanoTime() - start) / (1000 * 1000);
System.out.println(i + "\t" + timeMillis + "\t" + diff + "\t" + rand + "\t" + temp);
}
}
}