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

C# Discussion :

[C#] Faut il toujours arrêter un thread avant la fin de l'executable ?


Sujet :

C#

  1. #1
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut [C#] Faut il toujours arrêter un thread avant la fin de l'executable ?
    Bonjour,
    Question simple mais d'extrème importance :
    Suppons que je créé un thread comportant une boucle infinie.
    Si j'arrète l'executable père, est ce que le thread s'arrête (ce dont j'ai besoin...)?

    En résumer faut il toujours arrèter un thread avant la fin de l'executable ?

    Merci d'avance pour vos réponse
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [C#]Thread
    Citation Envoyé par raptor70
    Bonjour,
    Question simple mais d'extrème importance :
    Suppons que je créé un thread comportant une boucle infinie.
    Si j'arrète l'executable père, est ce que le thread s'arrête (ce dont j'ai besoin...)?

    En résumer faut il toujours arrèter un thread avant la fin de l'executable ?
    oui puisque la fonction du Thread est de ne pas s'arrêter de lui même ici
    Comment arrêter un thread ?
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Vu que je l'ai stocke (en référence...) dans un ArrayList, il suffit que je mette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    foreach(th in listthread)
    {
           th.Abort();
    }
    ...
    à la fin de mon exe ?
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  4. #4
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut Re: [C#]Thread
    Citation Envoyé par neguib
    Citation Envoyé par raptor70
    Bonjour,
    Question simple mais d'extrème importance :
    Suppons que je créé un thread comportant une boucle infinie.
    Si j'arrète l'executable père, est ce que le thread s'arrête (ce dont j'ai besoin...)?

    En résumer faut il toujours arrèter un thread avant la fin de l'executable ?
    oui puisque la fonction du Thread est de ne pas s'arrêter de lui même ici
    Comment arrêter un thread ?
    C'est pas totallement vrai, en fait, il existe deux types de Thread, ceux dit de premier plan (foreground thread) et ceux d'arrière-plan (background thread). Si les premiers empeche effectivement le processus de se terminer, les autres non. En d'autre termes, lorsque tout les threads foreground d'un processus ont terminés, le CLR va invoqué la méthode Abort() sur tout les threads background et le processus peut se terminer.

    La propriété IsBackground de la classe Thread permet de placer un Thread en arrière-plan ou de savoir s'il l'est.

    Attention, cette notion de premier plan, arrière plan n'a rien avoir avec le fait que le thread tourne ou pas. Elle implique juste une relation sur la condition de terminaison d'un processus.

    Par ailleurs, comme dit dans la faq, c'est pas joli joli d'arreter sec un thread même si dans bcp de cas, cela n'aura pas forcement un impact très négatif.

  5. #5
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Voila la facon dont je créé mes thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach(DataRow appli in listeappli)
    {
       Surveillance app = new Surveillance(surv,appli);
       Thread t = new Thread(new ThreadStart(app.Go));                
       listthread.Add(t);
       t.Start();
    }
    sachant que dans Go :
    a la fin de mon exe, doit mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach(Thread th in listthread)
                    {
                        th.Abort();
                    }
    ou autre chose ????
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  6. #6
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Thread t = new Thread(...);
    t.IsBackground = true;
    listThread.Add(t);
    t.Start();
    Et c'est tout, plus besoin de t'en préocupper. Une fois ton soft quitter, verifie bien qu'il n'est plus dans liste des processus dans le gestionnaire des taches, au cas contraire, y'a un truc qui va pas.

  7. #7
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Merci à vous deux...
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

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

Discussions similaires

  1. [JavaScript] [FAQ] Mais pourquoi faut-il toujours déclarer ses variables ?
    Par Auteur dans le forum Contribuez
    Réponses: 0
    Dernier message: 08/01/2009, 20h08
  2. Faut-il toujours utiliser la programmation objet ?
    Par Pierre8r dans le forum Langage
    Réponses: 3
    Dernier message: 12/08/2008, 09h00
  3. Réponses: 5
    Dernier message: 22/10/2007, 14h00
  4. [MySQL] Faut-il toujours un champ id autoincrement ?
    Par vg33 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/07/2007, 10h36
  5. Faut-il toujours choisir le modem du FAI
    Par norac dans le forum Dépannage et Assistance
    Réponses: 12
    Dernier message: 25/08/2006, 16h08

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