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

Concurrence et multi-thread Java Discussion :

[Thread] PB Thread.sleep(1000) marche pas [Bug report]


Sujet :

Concurrence et multi-thread Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 34
    Points
    34
    Par défaut [Thread] PB Thread.sleep(1000) marche pas
    J'ai un probleme....

    Thread.sleep(1000) est plus rapide qu'une seconde réelle, du coup si je lance une application pour qu'elle tourne 1 heure, je me retrouve avec environ 8 minutes de décalage!!!!!!
    D'où ça vient..

    AU secours je ne trouve pas et je vais péter un plomb si ça continue.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Tu as besoin de quelle précision ? La seconde ? Ce que tu peux faire, c'est une boucle où tu fais une seconde de pause à l'intérieur, et la condition de sortie porte sur la différence entre l'heure courante et l'heure de juste avant la boucle.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Il s'agit a priori d'un bug java répertorié avec jes jdk 1.3x et au moins jusqu'au jdk 1.4.2 (pour les jdk plus tardifs, je ne sais pas).
    D'après ce que j'ai compris, la fonction Thread.sleep() se base sur l'OS pour évaluer la longueur d'une milliseconde. Et l'OS se base sur l'architecture matérielle de la machine. Donc il est possible qu'une différence (parfois importante) entre deux machines différentes ou sur une même machine avec deux OS.
    Je ne vois que deux solutions :
    - soit tu essayes ton appli sur une autre machine (avec une architecture matérielle différente),
    - soit (mais je n'ai pas essayé) tu passes par la fonction Object.wait() (réponse conseillée dans un forum java, mais non testé).
    La discussion sur le bug dans le forum sun :
    http://bugs.sun.com/bugdatabase/view...bug_id=4500388

    bonne chance.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    merci pour vos réponses et pour le lien sur le bug. J'ai pu voir que cela fait longtemps que le bug est connu et que je ne suis pas le seul dans ce cas, mais surtout et c'est là le drame personne n'a de réels solutions pour ça.

    J'ai essayer le Object.wait mais même résultat à part que j'ai remarquer que cela libèreun peu mieux le CPU.

    Sinon je vais essayer la soluce de magiline. Mais c'est quand dommage d'avoir recours à une ruse pour quelque chose d'aussi important que la gestion des threads!!

  5. #5
    Membre régulier Avatar de jerome.petit
    Inscrit en
    Novembre 2002
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 78
    Points : 96
    Points
    96
    Par défaut
    Suivant ce que tu as à implémenter tu peux aussi utiliser la classe :
    java.util.Timer

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    en fait j'utilise un thread pour faire la fonction timer car je me suis rendu compte que le timer peut être amené pour des tâches répétitives et longues à s'arrêter de lui même et oui encore un bug incroyable, mais là c'est une autre histoire.....

  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
    Points : 3 675
    Points
    3 675
    Par défaut
    écoute, si tu veux vraiment une base de temps absolument fiable, le seul moyen est d'utiliser la méthode System.currentTimeMillis(), qui te retourne en fait le nombre de millisecondes écoulées depuis le 1er janvier 1970 à 00h00m

    et ça ça permet de faire tous les calculs de temps que tu veux
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

Discussions similaires

  1. "Clipboard.GetText()" ne marche pas dans un thread
    Par the-morpher dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/08/2011, 11h22
  2. Thread : ne marche pas avec IHM PyGTK
    Par syrius31 dans le forum Général Python
    Réponses: 2
    Dernier message: 18/03/2011, 07h13
  3. open thread ne marche pas
    Par dvechamb dans le forum Windows
    Réponses: 6
    Dernier message: 04/02/2010, 10h11
  4. JButton avec boucle while contenant thread.sleep(1000)
    Par v4np13 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/10/2007, 20h31
  5. Pourquoi mon Thread ne marche pas ?
    Par Cazaux-Moutou-Philippe dans le forum Delphi
    Réponses: 9
    Dernier message: 27/05/2007, 16h19

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