Hallo,
ich suche eine Möglichkeit innerhalb einer While-Schleife, die Bestandteil eines Threads ist, ohne größere CPU-Last eine Pause im Nanosekundenbereich einzubauen. Angedacht sind mittels einem weiteren while-loop und System.nanoTime() experimentell ermittelte 20000ns.
Benutze ich nun stattdessen Thread.sleep(0,20000) gehts in die Hose, sleep() löst leider nicht besser als 1ms auf, entspricht also Thread.sleep(1), kürzer ist nicht möglich, außer natürlich sleep(0).
Die sleep-Variante hat eh weitere Nachteile, so das nicht zugesichertes Warte-Interval und dass die Ausführungszeit der Instruktionen innerhalb des Loops im Thread nicht eingehen können.
Gibt es noch andere Möglichkeiten?
Die Variante A funktioniert, erzeugt aber CPU-Last vom Feinsten.
Variante B funktioniert nicht, was das gewünschte Zeitinvervall angeht.
Beste Grüße, mariane
ich suche eine Möglichkeit innerhalb einer While-Schleife, die Bestandteil eines Threads ist, ohne größere CPU-Last eine Pause im Nanosekundenbereich einzubauen. Angedacht sind mittels einem weiteren while-loop und System.nanoTime() experimentell ermittelte 20000ns.
Benutze ich nun stattdessen Thread.sleep(0,20000) gehts in die Hose, sleep() löst leider nicht besser als 1ms auf, entspricht also Thread.sleep(1), kürzer ist nicht möglich, außer natürlich sleep(0).
Die sleep-Variante hat eh weitere Nachteile, so das nicht zugesichertes Warte-Interval und dass die Ausführungszeit der Instruktionen innerhalb des Loops im Thread nicht eingehen können.
Gibt es noch andere Möglichkeiten?
Die Variante A funktioniert, erzeugt aber CPU-Last vom Feinsten.
Variante B funktioniert nicht, was das gewünschte Zeitinvervall angeht.
Beste Grüße, mariane
Java:
// A
@Override
public void run()
{
long pause = 20000;
long start;
...
while(true)
{
start = System.nanoTime();
...
if(Thread.interrupted())
{
break;
}
while(start + pause > System.nanoTime())
{
}
}
}
Java:
// B
@Override
public void run()
{
int pause = 20000;
...
while(true)
{
...
try
{
Thread.sleep(0, pause);
}
catch( InterruptedException e )
{
break;
}
}
}