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 :

Comment arrêter mon Thread ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 52
    Par défaut Comment arrêter mon Thread ?
    Bonjour à tous,

    J'ai besoin de votre aide, via une commande que l'on m'envoie (socket) je dois démarrer un mode de démonstration de mon programme.
    J'ai créé une classe Demo que je démarre via la méthode Start(); cela fonctionne bien.
    Le soucis que j'ai maintenant c'est que je ne sais pas comment arrêter le Thread en cours.
    C'est un programme que je reprends et je débute un peu en Java, quelqu'un pourrait-il me donner un coup de main ?

    Voici le code :

    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
    public class Demo{
    	Timer t;
    	private static Demo MyDemo = null; // Singleton
     
    	/**
             * Constructor
             */
    	private Demo(){
    	}
     
    	/**
             * Return the Singleton of Demo
             * @return Demo
             */
    	public static Demo getInstance(){
    	 	if(MyDemo==null)
    	 	MyDemo = new Demo();
    	 	return MyDemo;
    	 }
     
    	/**
             * To stop the demo mode
             */
    	protected void Stop() {
    		System.out.println("Arret du mode demo");
    		t.cancel();
    		t=null;
    		//t = new Timer();
    		//t.schedule(new MonAction(), 99999, 10000);
    	 }
     
    	/**
             * To start the demo mode
             */
    	protected void Start() {
    		System.out.println("Demarrage du mode demo");
    		t = new Timer();
    		t.schedule(new MonAction(), 1, 10000);
    	}
     
    /**
     * Timer for the demo mode
     */
    class MonAction extends TimerTask {
    	public void run() {
     
    		// Mon code qui doit tourner en boucle et qui doit s'arrêt lorsque
    	}
    }
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
     * Timer for the demo mode
     */
    class MonAction extends TimerTask {
            private volatile finished = false;
            public void stop(){finished=true;}
    	public void run() {
     
    		while(!finished) {
                            //on boucle
                    }
    	}
    }
    }
    Par contre, vu que tu tourne en boucle dans run, ce n'est pas un timer task et un timer qu'il te faut, c'est un Thread. Les timer, c'est pour les opération répétitive, une boucle continue, c'est une seule action continue.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 52
    Par défaut
    Merci tchize_ pour ta réponse
    Je dois créer un thread avec un boucle infinie c'est ça ?
    Ce que je ne vois pas comment faire c'est pour arrêter ce thread lorsqu'il est en cours d’exécution.
    Merci en tout cas pour ton aide.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    La boucle n'est pas infinie, elle s'arrête quand finished passe à true.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 52
    Par défaut
    Je suis désolé de t'embêter avec ça tchize_ ça semble surement évidemment pour toi mais je ne comprends pas trop.
    Aurais-tu un exemple ?

    Je vais regarder sur internet en parallèle, il me faut une solution pour demain matin

    Edit : en fait je souhaite que le code contenu dans mon thread tourne en boucle et ne s'arrête complètement que lorsque je reçois une commande.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    L'exemple que je t'ai donné avant ne te suffit pas ? Il suffit d'appeler cEstFini() pour arrêter ton thread


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
     * Timer for the demo mode
     */
    class MonAction extends Thread{
            private volatile finished = false;
            public void cEstFini(){finished=true;}
    	public void run() {
     
    		while(!finished) {
                            //ton code
                    }
    	}
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MonAction action = new MonAction();
    action.start();
    //.....
    action.cEstFini();

Discussions similaires

  1. Comment arrêter un Thread proprement
    Par takinelinfo dans le forum C#
    Réponses: 9
    Dernier message: 08/01/2018, 08h42
  2. Où est comment placer mon Thread?
    Par Micke7 dans le forum Général Java
    Réponses: 3
    Dernier message: 13/04/2010, 12h25
  3. Comment arréter un thread qui exécute une instruction bloquante
    Par nibor2luxe dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 28/02/2008, 17h03
  4. Réponses: 6
    Dernier message: 11/05/2006, 16h00
  5. Réponses: 18
    Dernier message: 06/04/2005, 14h09

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