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

Threads & Processus C++ Discussion :

[thread] Stopper un thread


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [thread] Stopper un thread
    Bonjour à tous,

    Je me demande quelle est la meilleure façon de demander gentiment à un thread de s'arrêter?
    Sachant bien sûr qu'on est programmeur du programme appelant ET du thread. C'est à dire que je ne cherche pas à arrêter brutalement un thread, c'est impossible ou pas portable (et pas bien ), mais bien à lui demander d'arrêter sa boucle ou son calcul en cours.

    J'en suis pour l'instant au bête booléen must_stop dans le programme appelant (principal) mais c'est pas super élégant. Un event serait un poil mieux à mon goût.

    Je suis preneur de vos idées. (j'utilise boost.Thread)



    Poukill

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Moi j'utilise un event, un IOCP ou un mutex, cela dépend des contextes. Enfin un truc sur lequel je peut faire une attente bloquante sans consommer de CPU.

    Le booléen "must_stop" + sleep(), je trouve pas cela terrible non plus.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    En fait tout dépend ce que fait ton thread...
    Si ton thread a des opérations bloquantes (sockets, attente d'evenements,...) alors oui, le passage par un event systeme est quasi obligatoire (à bas les programmes qui prennent 100% du temps CPU ! )

    Si par contre ton thread n'a pas d'opération bloquante (par exemple transcodage d'une vidéo, ou autre), alors un simple booléen partagé peut être suffisant (et pas moins élégant, surtout quant on sait comment sont gérés les events en général ).

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Non mon thread n'a pas d'opération bloquante, donc...
    Oui, pour l'instant je suis toujours sur mon booléen!

    Merci à vous deux, j'essaierai d'effectuer quelques tests dans le futur quand j'aurai le temps, et je reviendrai les poster ici!

    A+

    Poukill

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le bon moyen d'annuler un thread est le lancer asynchrone d'exception, ce qui constitue le seul moyen de libérer proprement les ressources.

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Le bon moyen d'annuler un thread est le lancer asynchrone d'exception, ce qui constitue le seul moyen de libérer proprement les ressources.
    Il me semble bien que non, et même que c'est une erreur (cf pourquoi il ne faut pas utiliser Thread.Abort en C#).

    L'idée étant qu'une exception asynchrone pouvant arriver à n'importe quel moment, elle peut arriver lors :
    - de la création du thread
    - de la mort du thread
    - d'une autre exception
    - d'une création d'objet, qui se retrouve alors partiellement créé

    Le premier cas est peu probable, les autres le sont plus. Le plantage de l'application complète suite à une exception asynchrone n'est pas purement théorique, je l'ai rencontré (en C#) dans une application réelle.

    Un bon article là-dessus

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

Discussions similaires

  1. [Thread] Stopper un thread pendant que les autres tournent
    Par NutellaPiou dans le forum Concurrence et multi-thread
    Réponses: 13
    Dernier message: 30/01/2009, 11h45
  2. Stopper un thread par un signal
    Par kazh75 dans le forum Général Python
    Réponses: 4
    Dernier message: 04/04/2007, 14h53
  3. [Thread] Stopper l'exécution d'un thread brutalement
    Par Razgriz dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 31/01/2007, 19h55
  4. Fermeture de thread/Stopper recvfrom
    Par homeostasie dans le forum Visual C++
    Réponses: 7
    Dernier message: 17/11/2006, 09h59
  5. Stopper un thread
    Par Tenguryu dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/07/2006, 21h57

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