Question

Je me demande ce que la façon la plus précise de la conversion d'une grande valeur nanosecondes est en millisecondes et nanosecondes, avec une limite supérieure sur les nanosecondes de 999999. L'objectif est de combiner les valeurs nanosecondes et millisecondes pour assurer la résolution maximale possible avec la limite donnée. Ceci est pour la comparaison avec les sommeil / méthodes d'attente et une autre bibliothèque externe qui donne des grandes valeurs nanosecondes.

Edit: mon apparence de code comme suit maintenant:

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) {

        }
    }
}

Cordialement, Chris

Était-ce utile?

La solution

Il suffit de prendre la divmod de celui-ci avec 1000000.

Autres conseils

Pourquoi ne pas utiliser les méthodes intégrées Java. Le TimeUnit fait partie du paquet concurrent donc construit exactement pour vos besoins

  long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS);

Pour une conversion toujours plus court en utilisant java.util.concurrent.TimeUnit, ce qui équivaut à ce que Shawn a écrit ci-dessus, vous pouvez utiliser:

    long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top