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 :

Arret d'un thread


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut Arret d'un thread
    Bonjour,

    Dans le cadre de mon projet il m'est nécessaire de créer un thread, donc j'ai écris ce code mais voila un petit soucis, si je crée par exemple un thread t, quand j'appelle la méthode t.start(); le thread ce lance correctement mais impossible de le stoppe avec la méthode t.arreter(); si quelqu'un à une idée



    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
    20
    21
    22
    package msxy05.jeuvie;
     
    public class MonThread extends Thread{
    	private Monde monde;
    	private MonCanvas canva;
    	private boolean actif = true;
     
    	public MonThread(Monde monde,MonCanvas canva){
    		this.monde=monde;
    		this.canva=canva;	
    	}
     
    	 public void run() {
    		 while(actif){
    			 this.monde.Nextgeneration();
    			 this.canva.paintAll(this.canva.getGraphics());
    			  }
    		  }	  
    	 public void arreter() {
    		 actif=false;
    	 }
    }

    Cordialement
    Serni

    ps: j'ai poste dans cette rubrique je sais pas trop si c'est la mieux indiqué :/

  2. #2
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    Je t'invite a consulter la javadoc de la méthode Thread.stop qui est déprécié et donc qui ne doit pas être utilisé. Cepedant, la doc donne toutes les infos dont tu as besoin.

    Tu peux aussi regarder ce post (c'est le premier lien quand tu cherche "Thread stop" dans google)


    EDIT: j'ai lu un peu trop rapidement ton post et me suis rendu compte que je ne répondait pas a ta question.
    J'ai donc repris ton code qui fonctionne très bien chez moi.
    Quel est exactement ton problème ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut
    Merci de la réponse,

    quand j'appelle "arreter();" le thread continue de fonctionner voila mon problème

  4. #4
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    si tu prend ce code (tu remarqueras que c'est le même que le tiens a peu de chose prés) :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    package thread;
     
    public class StartStop {
     
    	private final static Object LOCK = new Object();
     
    	private final static void attendre(long timeout) {
    		synchronized (LOCK) {
    			try {
    				LOCK.wait(timeout);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
     
    	public static class MonThread extends Thread {
    		private boolean actif = true;
     
    		public MonThread() {
    		}
     
    		public void run() {
    			while (actif) {
    				System.out.println("actif");
    				attendre(1000);
    			}
    			System.out.println("inactif");
    		}
     
    		public void arreter() {
    			actif = false;
    		}
    	}
     
    	public static void main(String[] args) {
    		System.out.println("debut");
    		MonThread t = new MonThread();
    		t.start();
    		attendre(2000);
    		t.arreter();
    		try {
    			t.join();
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		attendre(1000);
    		System.out.println("fin");
    	}
    }
    Ca fonctionne bien correctement.
    A mon avis, le problème ne vient de ton algo mais de l'interface graphique qu'il faut fermer explicitement.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Par défaut
    Je ne comprend pas trop le fait de fermer mon "interface graphique explicitement"

    pour expliquer le contexte mon thread me sert à lancer la simulation de ma grille qui ce trouve sur mon interface et je veux simplement stope la simulation de la grille (donc le thread) mais pas fermer l'interface

  6. #6
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Juste une question, c'est cmt tu arretes ton thread?
    Est ce que t'as un bouton ou un endroit explicite dans ton appli qui dit "arreter simulation par exemple"?

  7. #7
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    Citation Envoyé par Serniratte Voir le message
    je veux simplement stope la simulation de la grille (donc le thread) mais pas fermer l'interface
    +1

    As tu essayé de débuguer ton application (en mode pas à pas) pour voir pour quel raison ton thread n'est pas arrété (il n'y a aucune raison qu'il continue de tourner)
    Peut être que tu n'appel pas la méthode arreter sur le bon thread ? (je ne vois pas pouquoi mais bon...) Es tu sur que la méthode arreter est appelée correctement ?

  8. #8
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par Serniratte Voir le message
    Je ne comprend pas trop le fait de fermer mon "interface graphique explicitement"

    pour expliquer le contexte mon thread me sert à lancer la simulation de ma grille qui ce trouve sur mon interface et je veux simplement stope la simulation de la grille (donc le thread) mais pas fermer l'interface
    POur arreter ton thread, il faut que la variable actif soit vue / appelée de l'extérieur. En gros, il faut qu'elle soit publique.
    Donc, il faut la protéger avec des sémaphores

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

Discussions similaires

  1. L'arret d'un thread par le CLR
    Par tobba dans le forum VB.NET
    Réponses: 2
    Dernier message: 12/12/2008, 20h39
  2. arret d'un thread par son id ?
    Par gregcat dans le forum Windows Forms
    Réponses: 12
    Dernier message: 15/05/2008, 23h17
  3. arret Background worker thread
    Par ricky78 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/02/2007, 12h15
  4. delphi/Oracle :FListner, arret d'un thread
    Par Lust14 dans le forum Delphi
    Réponses: 10
    Dernier message: 07/12/2006, 20h23
  5. [Thread] pb apres arret d'un thread
    Par titiyo dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2006, 10h11

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