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

Java Discussion :

arrêter un thread bloquer sur E/S ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut arrêter un thread bloquer sur E/S ?
    bonjour,
    est-il possible d'arrêter un thread bloqué sur une I/O
    merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    Salut,

    Je n'ai pas étudié l'API en détail mais il me semble que la plupart des méthodes permettant de d'arrêter un thread sont dépréciées.

    Peut-être qu'en précisant un peu plus ton problème on pourra t'aider.

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par bigbear19 Voir le message
    il me semble que la plupart des méthodes permettant de d'arrêter un thread sont dépréciées.
    Thread.stop() est effectivement déprécié.

    Par contre, Thread.interrupt() est justement là pour ça:

    If this thread is blocked in an I/O operation upon an interruptible channel then the channel will be closed, the thread's interrupt status will be set, and the thread will receive a ClosedByInterruptException.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    apparemment la methode interrupted est définit pour les classes qui etend Thread, mais mon implemente runnable,
    donc je vois comment appele la methode interrupted
    merci

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    je m'explique :
    pour que la lecture du E/S ne me bloque pas je cree un thread qui attend qui lit quelque chose, s'il ya rien, il est bloqué,
    et dans mon application qui à crée ce thread j'attend que le thread me retourne quelque chose sinon au bout d'un moment je passe à autre chose(mon application n'est plus bloquée), mais mon thread reste tjr bloqué sur la lecture, je dois le tué
    merci

  6. #6
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    un bout de code, notamment du moment ou tu lance ton Runnable ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    classe du thread lecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class DataReaderThread extends Observable implements Runnable {
        public DataReaderThread(CRequestE512 instance) {
          addObserver(instance);
        }
        public void asyncRead() {
          new Thread(this).start();
        }
        public void run() {
          int res = -1;
          try {
            res = comm.readData(); //lecture du code retour sur port serie
          } catch (IOException e) {  Logger.getLogger(Manager.class).fatal("probleme imprimante");
          }
          if (res != -1) {
            setChanged();
            notifyObservers(new Integer(res));
    }
        }
      }
    dans mon application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Integer responce;
    public void state(){
    DataReaderThread dataReaderThread = new DataReaderThread(this);
    dataReaderThread.asyncRead();
    long t;
    long td;
    td = System.currentTimeMillis();
    do {
          t = System.currentTimeMillis();
    } while (((t - td) < 10L) && responce == null);
    if(responce != null) {} //le thread à lut sur le buffer
    else //le thread soit il est resté bloqué ou il a levé une exception
    //là je tue le thread si il est bloqué
    }
    @Override
      public void update(Observable o, Object val) {
        responce = (Integer) val;
    }

  8. #8
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par rimas2009 Voir le message
    bonjour,
    est-il possible d'arrêter un thread bloqué sur une I/O
    merci
    Oui, à partir d'un autre thread et en règle générale le thread qu'on interromp va émettre une IOException, et plus précisément une InterruptedIOException:

    Citation Envoyé par InterruptedIOException
    Signals that an I/O operation has been interrupted. An InterruptedIOException is thrown to indicate that an input or output transfer has been terminated because the thread performing it was interrupted.

Discussions similaires

  1. [Thread] arrêter un thread
    Par melvar dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 10/04/2006, 18h06
  2. threads simultanes sur une meme socket
    Par khayyam90 dans le forum Développement
    Réponses: 9
    Dernier message: 28/01/2006, 16h03
  3. plusieurs threads ecrivent sur la meme socket
    Par estergiou dans le forum C++
    Réponses: 3
    Dernier message: 04/11/2005, 01h38
  4. Réponses: 18
    Dernier message: 06/04/2005, 14h09
  5. Arrêter une Thread brutalement!
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 21h29

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