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 :

[Thread] Signal/Slot et Thread


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut [Thread] Signal/Slot et Thread
    C'est possible dans une GUI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    	connect(&thread, SIGNAL(emitSignal()), this, SLOT(this->method()));
    Mais ca ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	connect(this->interface.sendButton, SIGNAL(clicked()), this, SLOT(thread.method()));
    ou est ce qu on est obligé de passer par une méthode contenant thread.method() ?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Salut.
    pour commencer faudrait que tu revoie les connect.
    Tu peut regarder la FAQ elle viens d'être mise a jour et la doc :
    http://qt.developpez.com/doc/latest/...sandslots.html

    Ensuite pour le connect entre thread tu peut regarder :
    http://www.developpez.net/forums/sho...d.php?t=484613
    http://www.developpez.net/forums/sho...2&postcount=23

  3. #3
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    Merci, je vais regarder, pour le moment je mets les méthodes du thread dans les slots de mon appli. Ca fonctionne. J'ai lu le doc Trolltech récemment. Hormi une particularité des threads, je ne vois pas pourquoi on ne pourrait pas mettre en slot un méthode d'une instance de QThread (un thread, quoi), et l'activer avec un signal du main thread. D'autant plus que l'inverse est possible, comme dans l'exemple de mandelbrotalors...

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Salut
    Citation Envoyé par ttone Voir le message
    Merci, je vais regarder, pour le moment je mets les méthodes du thread dans les slots de mon appli. Ca fonctionne. J'ai lu le doc Trolltech récemment. Hormi une particularité des threads, je ne vois pas pourquoi on ne pourrait pas mettre en slot un méthode d'une instance de QThread (un thread, quoi), et l'activer avec un signal du main thread
    attention un QThread et les objet créé dans son créateur appartiennent au thread qu'il la créé!!!
    Seul tout les objets qui sont créént dans la méthode run appartiennent au nouveau thread
    J'ai mis un exemple ici :
    http://www.developpez.net/forums/sho...5&postcount=15

    la différence est le mode de connection. En gros, l'appel du slot d'objet appartenant au même thread que le signal sera comme un appel direct.

    l'appel du slot d'objet appartenant à un thread différent que le signal, l'appel sera sérialisé dans l'eventloop de la thread pour être traité plus tard.

    Un autre point est qu'un emit est thread safe

  5. #5
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par ttone Voir le message
    Hormi une particularité des threads, je ne vois pas pourquoi on ne pourrait pas mettre en slot un méthode d'une instance de QThread (un thread, quoi)
    On peut, c'est juste que ce n'est pas ce que tu demandes. Tu connecte le signal a un slot de "this" au lieu d'un slot de ton thread:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(this->interface.sendButton, SIGNAL(clicked()), thread, SLOT(method()));

  6. #6
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    toutes mes confuses, ma question est en fait, peut on écrire ca ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	connect(this->interface.sendButton, SIGNAL(clicked()), thread, SLOT(thread.method()));
    c'est thread safe, donc ok.
    par crainte, je passais par des méthodes ...qui contenait

  7. #7
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    Seul tout les objets qui sont créént dans la méthode run appartiennent au nouveau thread
    A propos, je n'ai quasiment rien dans ma méthode run, sinon quelques initialisations secondaires, qui passent après le constructeur. Toutes mes méthodes sont "en plus", et sont appelé par les événements GUI (keyPressEvent, signal sur éléments graphiques, etc.). Est ce normal ?
    la différence est le mode de connection. En gros, l'appel du slot d'objet appartenant au même thread que le signal sera comme un appel direct.

    l'appel du slot d'objet appartenant à un thread différent que le signal, l'appel sera sérialisé dans l'eventloop de la thread pour être traité plus tard.
    est ce que tu as un lien particulièrement intéressant pour ca ? Ca m'intéresse pas mal...

    Un autre point est qu'un emit est thread safe
    Vive Qt, c'est pratique à souhait

  8. #8
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Non, comme le disent Aurélien et Mongaulois, c'est possible. Les signaux/slots de Qt permettent justement de connecter des signaux à des slots qui sont dans des threads différents. Il y a une page de la doc officielle qui y est dédiée si je ne m'abuse.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par ttone Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	connect(this->interface.sendButton, SIGNAL(clicked()), thread, SLOT(thread.method()));
    c'est thread safe, donc ok.
    pas dans ce sens car this et thread sont la même thread. Donc le connect est direct
    par contre un emit dans la fonction run est threadsafe.
    regarde le lien que je t'ai donnée. y as aussi un exemple pour comprendre.
    Tu as aussi cette partie de la doc
    http://qt.developpez.com/doc/latest/...s-and-qobjects

    pour ce que tu veut faire, un QTimer ne correspond pas??

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

Discussions similaires

  1. Thread - Signal : Stop thread sur signal
    Par DaSiX dans le forum Général Python
    Réponses: 5
    Dernier message: 30/12/2014, 15h58
  2. Réponses: 8
    Dernier message: 22/05/2010, 11h50
  3. [TOMCAT] [THREAD] Ajout d'un thread à Tomcat
    Par olivangel dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 12/08/2004, 11h55
  4. [Thread] comment arreter un thread qui execute une methode b
    Par Cyber@l dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 04/08/2004, 10h51

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