Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2747 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [ THREAD ] Arréter un thread qui exécute une commande bloquante.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ THREAD ] Arréter un thread qui exécute une commande bloquante.

n°1693757
diez
Posté le 27-02-2008 à 17:12:20  profilanswer
 

Bonjour,
 
Je suis en gros dans le cas suivant :

Citation :

class MonThread extends Thread {
 MonThread() {}
 public void run() {
  try {
   // instructions avant commande bloquante
   Thread.sleep(10000);  
   // instructions après commande bloquante
  }
  catch(InterruptedException ie) {}
 }
}


 
En réalité dans mon cas à la place de sleep() j'ai une fonction qui fait tout plein de chose et qui à un temps d'exécution aléatoire.
 
Je voudrais à n'importe quel moment stopper ce Thread. J'ai pensé à la solution qui consiste à créer une fonction qui lève une interruption pour rentrer dans le catch :

Citation :

class MonThread extends Thread {
 private boolean fin = false;
 MonThread() {}
 public void run() {
  try {
   // instructions avant commande bloquante
   testFin();
   Thread.sleep(10000);  
   testFin();
   // instructions après commande bloquante
  }
  catch(InterruptedException ie) {}
 }
 public void testFin() throws InterruptedException {
   if (fin == true) {
    throw new InterruptedException();
    }
  }  
 public void signalerFin() {
  fin = true;
  }
}


 
Cependant l'exception n'est levée qu'après la fin de l'exécution de mon instruction bloquante. Ce qui dans mon cas n'est pas bon car je voudrais qu'au moment où j'ai décide de stopper mon Thread, il s'arrête, et pas qu'il s'arrête à la fin d'un instruction ayant un temps d'exécution aléatoire.
 
Si vous avez des idées, faite passer svp :)
dieZ

mood
Publicité
Posté le 27-02-2008 à 17:12:20  profilanswer
 

n°1696222
nerisson
Pic-pic
Posté le 03-03-2008 à 12:02:17  profilanswer
 

Pourquoi veux tu arreter le thread, tu ne peux pas le laisser se terminer normalement ?
Sinon je ne crois pas que tu puisses arreter un thread en lui envoyant un signal sans risquer un dead-lock.


---------------
Light is right
n°1703569
BifaceMcLe​OD
The HighGlandeur
Posté le 17-03-2008 à 17:18:30  profilanswer
 

La technique habituelle est celle que tu as choisie (attribut booléen "fin" ), mais il faut aussi que le code de ta fonction bloquante teste très régulièrement "if (stopNow) { ... }". Ce qui veut dire, oui, truffer son code de "if (stopNow) { ... }" (ou d'appels à une méthode "checkStopNow()" qui ferait le boulot, ce qui revient à peu près au même).
 
Normalement, seul le thread peut décider de sa propre fin, car il a très souvent pris des ressources qui doivent être libérées, et il a donc très souvent des libérations de ressources à faire une fois qu'il a reçu l'information de s'arrêter.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [ THREAD ] Arréter un thread qui exécute une commande bloquante.

 

Sujets relatifs
[C++ .NET] Comment passer un pointeur d'objet managé à un thread?problème d'affichage dans un thread différent du main
[résolu] Petit problème de Thread[Resolu] demande de renseignement sur la commande net use
Redirection d'une commande vers un fichierBlocage de thread et déblocage simultané
problème de connexion LDAP en ligne de commandeComment mettre le résultat d'une commande dans une variable DOS
[Resolu] Equivalent de la commande unpack de PHP/Perl en Java[SHELL]Utilisation du resultat de ma commande GREP pour un nul [CLOS]
Plus de sujets relatifs à : [ THREAD ] Arréter un thread qui exécute une commande bloquante.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR