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] Limiter le temps max d'une tâche


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre régulier Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 84
    Points
    84
    Par défaut [Thread] Limiter le temps max d'une tâche
    Voilà je voudrais qu'une tâche ne puisse pas prendre plus de x seconds à s'exécuter. Si c'est le cas, je veux l'arrêter.
    Cette tâche regarde le contenu d'une liste. Si elle ne trouve pas l'élément recherché, le thread associé s'endort pendant 0 à 3 secondes. Ensuite elle regarde de nouveau dans la liste et ainsi de suite .... Si l'élément recherché n'apparait jamais dans la liste, on a alors une boucle infinie => je ne suis dit que je pourrais associer un timer à ce thread. Quand celui-ci est terminé, le thread arrête la tâche en cours puis continue son exécution. Le code donne ceci pour le moment:

    DatagramPacket rPacket = null;
    while ( rPacket == null ) {
    rPacket = PacketList.get(Identifier);
    try {
    // Generate a random number between 0.0 and 3.0
    double r = Math.random() * 3.0;
    // Sleep between 0 and 3 seconds.
    Thread.sleep((long)(r * 1000));
    } catch (InterruptedException e) {}
    }

    PacketList appartient à un autre classe. Un autre thread se charge d'écrire dans cette liste.
    Merci de votre aide.

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,
    le plus simple dans ton cas est de consulter la date de départ du thread, et de vérifier dans le while si il a encore le droit de tourner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DatagramPacket rPacket = null;
     
    final long TOTAL_TIME_IN_MILLISECONDS = 50000; // 50 secondes
    long time = System.currentTimeMillis() + TOTAL_TIME_IN_MILLISECONDS;
     
    while ( rPacket == null  && System.currentTimeMillis() < time) {
      ...
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre régulier Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 84
    Points
    84
    Par défaut [RESOLU] Timer
    Merci pour ton aide!! Ca marche du tonnerre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Temps pour effectuer une tâche
    Par polymorphisme dans le forum ANT
    Réponses: 0
    Dernier message: 13/05/2011, 17h36
  2. Réponses: 16
    Dernier message: 18/09/2009, 11h00
  3. application pour limiter le temps d'ouverture d'une session
    Par Blue_Strike dans le forum Windows XP
    Réponses: 6
    Dernier message: 24/06/2009, 20h30
  4. [Thread] Comment recharger le GUI via une tâche de fond?
    Par nicdo77 dans le forum EDT/SwingWorker
    Réponses: 1
    Dernier message: 04/01/2008, 17h09
  5. Limiter le temps d'exécution d'une méthode
    Par nono_31 dans le forum Général Java
    Réponses: 9
    Dernier message: 16/08/2007, 15h46

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