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

Multithreading Discussion :

Stopper proprement un QThread avec un signal/slot [QThread]


Sujet :

Multithreading

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut Stopper proprement un QThread avec un signal/slot
    bonjour,
    j'écris une application qui acquiert des valeurs de capteurs depuis un serveur HTTP.
    Ces relevés se font dans un QThread à une période de 30 minutes et au bout d'un temps t, je stoppe ce thread en lui envoyant un signal qui positionne un booléen pour exploiter les relevés. J'utilise un mutex pour émettre le signal hors temps d'acquisition.
    Mon problème: quand je stoppe, dans le pire des cas, j'attends 29 minutes et des secondes que le thread se termine effectivement.
    Mon 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
     
    void Worker_thread::run()
    {
        //faire tourner en boucle, arrêt sur un signal provenant de MainWindow
        do
        {
            //prendre le mutex
            //emettre requête
            //acquérir données
            //traiter
            //stocker
            //relâcher le mutex
            sleep(1800);
        }
        while(theEnd == false);
    }
     
    /*
     * slot appellé par le signal theEnd de MainWindow
     */
    void Worker_thread::stop_thread()
    {
        theEnd = true;
    }
    y a-t-il une technique pour sortir du thread dès que le signal est intercepté ?

    Merci.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut stopper un thread
    Bonjour,

    en général pour stopper un thread proprement on utilise la méthode join() ( en C).

    Cdt,

    KM

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 103
    Points : 103
    Points
    103
    Par défaut méthode stop()
    Re-bonjour,

    sous Qt, apparemment il y a la méthode stop().

    Cdt,

    KM.

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

Discussions similaires

  1. [QtCore] Un peu de mal avec la syntaxe signal/slot new-style
    Par Sve@r dans le forum PyQt
    Réponses: 4
    Dernier message: 31/07/2017, 23h37
  2. Réponses: 4
    Dernier message: 05/08/2014, 09h03
  3. Signal/slot avec attributs différents
    Par spirzouf dans le forum Débuter
    Réponses: 13
    Dernier message: 30/09/2011, 21h14
  4. Problème avec un signal/slot
    Par scary dans le forum Qt
    Réponses: 12
    Dernier message: 11/12/2009, 21h20

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