Je me demande quel est le moyen le plus précis de convertir une grande valeur en nanosecondes en millisecondes et nanosecondes, avec une limite supérieure sur les nanosecondes de 999999. Le but est de combiner les valeurs en nanosecondes et millisecondes pour assurer la résolution maximale possible avec la limite donné. C'est pour la comparabilité avec les méthodes sleep/wait et une autre bibliothèque externe qui donne de grandes valeurs en nanosecondes.
Edit: mon code ressemble maintenant à ceci:
while (hasNS3Events()) {
long delayNS = getNS3EventTSDelay();
long delayMS = 0;
if (delayNS <= 0) runOneNS3Event();
else {
try {
if (delayNS > 999999) {
delayMS = delayNS / 1000000;
delayNS = delayNS % 1000000;
}
EVTLOCK.wait(delayMS, (int)delayNS);
} catch (InterruptedException e) {
}
}
}
À la vôtre, Chris
Prenez simplement le divmod avec 1000000.
Pourquoi ne pas utiliser les méthodes intégrées Java. La TimeUnit fait partie du package simultané, donc construit exactement pour vos besoins
long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS);
Pour une conversion toujours plus courte en utilisant Java.util.concurrent.TimeUnit
, équivalent à ce que Shawn a écrit ci-dessus, vous pouvez utiliser:
long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);