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 :

QTimer ne démarre pas dans QThread sans boucle d'événements principale


Sujet :

Multithreading

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 118
    Points : 77
    Points
    77
    Par défaut QTimer ne démarre pas dans QThread sans boucle d'événements principale
    Bonjour,

    j'ai lu pas mal de discussion autour de QTimer et QThread mais je n'arrive pas a faire fonctionner mon code correctement


    Je cherche a creer un QThread qui vas injecter des donnees a intervalle regulier dans mon thread principal.

    mon probleme:
    le thread se cree bien, mais le timer a l'interieur ne se met a tourner que quand mon thread principal peut executer des ProcessEvents.

    J'ai besoin que ce soit independant!

    Comment faire merci de votre aide







    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    // thread principal
    tThread   *tThr;
     
    tThr = new tThread(NULL);
    connect(tThr, SIGNAL(setTimer_signal()), this, SLOT(getTimer_slot()) );
    tThr->start();
     
     
    // la mon appli lance des calculs, il n'y a pas de ProcessEvents a l'interieur!
    calcul();
     
     
     
     
     
     
     
    // le timer thread
    tThread::tThread (QObject *parent)
    {
    }
     
    tThread::~tThread ()
    {
        delete timer;
    }
     
     
    void tThread::setTimer_slot ()
    {
        // do something
     
        emit setTimer_signal();
    }
     
    void tThread::startTimer_slot ()
    {
        timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(setTimer_slot()));
        timer->start(1000);
    }
     
     
    void tThread::run ()
    {
     
        startTimer_slot ();
        exec();
     
    }
     
     
     
    void tThread::stop ()
    {
        quit();
        wait();
    }

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par eric_vi Voir le message
    le thread se cree bien, mais le timer a l'interieur ne se met a tourner que quand mon thread principal peut executer des ProcessEvents.
    C'est normale :p
    En faite ton timer marche bien, c'est l'exécution du slot qui pose problème.
    Car le QThread appartiens au thread principale.

    Au plus simple,
    1- remplace le QThread par un QObject.
    2- créé les connexions
    3- créé un QTHread sans le réimplémenter et éxécute le thread (Depuis 4.4 par defaut ca lance une eventloop)
    4- fait un moveToThread de ton objet vers le QThread

    Un peu de lecture
    http://qt-labs.developpez.com/#thread
    et mon article en coure de finalisation
    http://yan-verdavaine.developpez.com...t_movetothread

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 118
    Points : 77
    Points
    77
    Par défaut
    merci de cette reponse... je comprends mieux le probleme mais cela ouvre une autre question...


    je veux que le slot getTimer_slot() (resultat de ma connection) execute aussi un rafraichissement de mon interface.

    question 1
    Est ce que ce slot fait parti du thread principal ou du timerThread?


    question 2
    Et que dois je appeler dans getTimer_slot() pour rafraichir mon interface immediatement. (quand je suis dans mon thread principal, j'utilise qApp->processEvents ())

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par eric_vi Voir le message
    quand je suis dans mon thread principal, j'utilise qApp->processEvents ()

    pourquoi?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 118
    Points : 77
    Points
    77
    Par défaut
    ok.. j'ai reussi a connecter un slot a mon thread principal.

    Malheureusement dans le main thread je suis en pleine boucle de calcul et je pensais qu'injecter un
    qApp->processEvents () aller provoquer une interruption et un rafraichissement immediat sans attendre que la fin des calculs s'effectue.

    cela n'a pas l'air d'etre le cas



    donc je vais mettre resolu pour la question que je posais , merci de votre aide

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par eric_vi Voir le message
    Malheureusement dans le main thread je suis en pleine boucle de calcul et je pensais qu'injecter un
    qApp->processEvents () aller provoquer une interruption et un rafraichissement immediat sans attendre que la fin des calculs s'effectue.
    Pourquoi ce calcul n'est pas dans un thread?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 118
    Points : 77
    Points
    77
    Par défaut
    j'avais mes calculs dans un thread a part, malheureusement dans 4.7 il y a un bug avec une fonction que j'utilise qui ne marche pas si elle n'est pas dans le thread principal ! Donc j'ai redeplace ces calculs dans le thread principale et de la mon probleme.

    Maintenant peut etre que je peux isoler juste la fonction qui bug dans 4.7 et la deplacer du thread calcul vers le thread principale. je ne sais pas si cela marcherait.

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

Discussions similaires

  1. [XL-2010] Macro dans modele excel qui ne démarre pas dans l'exemplaire généré
    Par bleuerouge dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/06/2014, 09h44
  2. Spring ne démarre pas dans l'exécution
    Par yassine05 dans le forum Spring
    Réponses: 2
    Dernier message: 16/06/2014, 23h14
  3. Tomcat ne démarre pas dans Eclipse
    Par STEMAR dans le forum Eclipse
    Réponses: 2
    Dernier message: 13/12/2013, 13h07
  4. MySql ne démarre pas dans WampServer
    Par Juju54350 dans le forum Administration
    Réponses: 3
    Dernier message: 08/02/2011, 14h05
  5. [Dojo] Recherche d'un attribut dans iframe sans boucle for
    Par Lionkid dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 21/10/2010, 14h58

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