IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[Systeme]currentTimeMillis


Sujet :

API standards et tierces Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut [Systeme]currentTimeMillis
    Bonjour,

    J'ai besoin de calculer très precisemment (à la milliseconde) le temps écoulé entre deux opérations dans mon code. Pour calculer ce temps d'execution j'utilise la méthode currentTimeMillis() de la classe System.
    Le probleme c'est que cette méthode a un fonctionnement plus étrange...
    Voila un exemple avec un code tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0;i<10000;i++) {
      System.out.println(System.currentTimeMillis());
    }
    Ce qui produit le résultat suivant (j'ai evidemment pas mis toutes les valeurs) :

    ...
    1139394945590
    1139394945590
    1139394945590
    1139394945590
    1139394945590
    1139394945590
    1139394945590
    1139394945590
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    ...
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945605
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    ....
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945621
    1139394945636
    1139394945636
    1139394945636
    1139394945636
    1139394945636
    1139394945636
    1139394945636
    1139394945636

    Pour une raison qui j'ignore, la fonction "saute" de temps en temps 16 millisecondes.
    Ma question est donc la suivante : est ce normal ? et dans ce cas il faudra m'expliquer qu'elle en est la raison. et sinon qu'est ce que je peux utiliser à la place de cette méthode pour obtenir les résultats que je souhaite.

    merci.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2002
    Messages : 125
    Par défaut
    n'est ce pas du au temps utilisé par le println ?

    tu peux peut etre essayer de mettre les chaines dans un StringBuffer et n'afficher qu'apres.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut Re: [System]currentTimeMillis
    Salut,

    Citation Envoyé par Guybrush
    Ma question est donc la suivante : est ce normal ? et dans ce cas il faudra m'expliquer qu'elle en est la raison.
    Il faut lire la doc !!!!

    Citation Envoyé par [url=http://javasearch.developpez.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()
    System.currentTimeMillis()[/url]]Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond, the granularity of the value depends on the underlying operating system and may be larger. For example, many operating systems measure time in units of tens of milliseconds.
    La valeur retourné correspondbien à des millisecondes, mais cela ne signifie pas que la précision est de l'ordre de la milliseconde... De plus la précision dépend du système d'exploitation...

    Généralement sous Windows la "précision" est de l'ordre de 16 ms...

    Citation Envoyé par Guybrush
    et sinon qu'est ce que je peux utiliser à la place de cette méthode pour obtenir les résultats que je souhaite.
    Avec Java 5.0 tu peux utiliser System.nanoTime(), mais la précision n'est pas garantit non plus...

    Sinon qu'est-ce que tu veux calculer exactement ?
    Si tu veux te rapprocher le plus possible du temps d'exécution réelle, il faut exécuter tes opérations un grand nombre de fois, et prendre le temps d'exécution totale. Il ne reste plus qu'a faire une petite division pour obtenir le temps moyen unitaire (et la "mauvaise" précision sera alors quasiment nulle).

    a++

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    merci pour vos réponses... j'avais bien lu la doc mais je ne l'avais pas interpreter de cette manière.

    Enfin, dans mon cas je suis bloquer car :
    1- J'utilise java 1.4 (et je ne peux pas changer)
    2- Je ne peux pas utiliser la solution de adiguba (moyenne des temps d'execution) pour des raisons d'implémentation qu'il serait trop long d'expliquer ici (ce ne sont pas vraiment des benchs mais plutot des temps de passage)

    Si vous avez d'autres idées, je suis preneur...

  6. #6
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    T'es vraiment à 16ms prêt ??? C'est pas un avion de l'armée que tu programmes si ?!

  7. #7
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par natha
    C'est pas un avion de l'armée que tu programmes si ?!
    sous windows !

  8. #8
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par Pill_S
    Citation Envoyé par natha
    C'est pas un avion de l'armée que tu programmes si ?!
    sous windows !
    Flippant !

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    non je ne suis pas à 16 ms près mais à 1ms pres !! (si je pouvais descendre encore en dessous je le ferais...)
    En 16ms il peut s'en passer des choses dans un programme Java !

  10. #10
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par Guybrush
    non je ne suis pas à 16 ms près mais à 1ms pres !!
    bah là il te reste l'option pingouin, qu'est sûrement plus performant de ce côté-là que windows

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    c'est bien ce que je craignais alors... donc je suis définitivement bloquer

  12. #12
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ou alors tu vas chercher la donnée de temps ailleurs... Je sais pas dans quelle mesure c'est possible dans ton applic...

    Mais style tu fais une page web sur un serveur Linux qui affiche seulement le current time en millisecondes et tu vas récupérer cette info avec ton prog. Mais bon, niveau perf et tout c'est vraiment pas la joie sauf si ton serveur est en local.

  13. #13
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Peut-être pas.

    Si tu peux nous en dire un peu plus sur tes besoins (sans dévoiler des secrets militaires ), quelqu'un du forum aura peut être une solution.

    Nous savons que tu dois déterminer une durée avec une précision d'au plus 1ms.

    Nous aimerions savoir le pourquoi.

  14. #14
    Membre averti
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Par défaut
    Une solution est d'attaquer une dll depuis java qui te fourni un service de temps plus précis cela dois pas être trop compliqué.

Discussions similaires

  1. [Java] Windows 7 & System.currentTimeMillis()
    Par GyZmoO dans le forum Général Java
    Réponses: 4
    Dernier message: 02/09/2010, 13h39
  2. stabilité de System.currentTimeMillis
    Par pipip dans le forum Langage
    Réponses: 5
    Dernier message: 18/01/2009, 17h38
  3. System.currentTimeMillis() ou getTime()
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 24/07/2007, 13h54
  4. [Info]Plus précis que System.currentTimeMillis()
    Par SuperCed dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 10/06/2005, 14h07
  5. [VB6] [Système] Récupérer le contenu d'une fenêtre DOS
    Par Nounours666 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 18/11/2004, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo