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 :

Transmission d'objets via signaux et slots


Sujet :

Multithreading

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Mars 2010
    Messages : 74
    Points : 81
    Points
    81
    Par défaut Transmission d'objets via signaux et slots
    Bonjour,

    Je maitrise les signaux et slots quand il faut transmettre des types basiques.
    Mais j'ai du mal à comprendre les règles à suivre pour transmettre des objets via signaux.

    J'ai deux classes C1 et C2, héritant de QObject, connectées entre elles via signal-slot, et situées dans des threads différents.

    A un moment C1 crée un instance d'une classe A et doit l'envoyer à C2.

    Dans un premier temps, admettons que A n'hérite de rien.
    Quelle est la règle pour transmettre correctement A ?
    Par valeur, par adresse, par référence ou par référence constante ?

    J'ai lu que les pointeurs étaient déconseillés entre threads, car rien ne garanti que le pointeur n'est pas été détruit dans l'un ou l'autre thread.
    Par valeur j'ai parfois des messages d'erreurs 'vtable' (je ne suis pas certain que cela venait de là).
    J'ai aussi lu qu'il fallait parfois utiliser qRegisterMetaType() mais je n'ai pas compris réellement quand, à part quand ça génère une erreur bien spécifique et que pour l'implémenter il fallait un constructeur par défaut, un constructeur de copie, et destructeur.

    Et si A hérite de QObject ?
    L'idée serait que C1, qui utilise des A, émette un signal transmettant ces A à chaque création pour que l'extérieur puisse s'y connecter s'il le souhaite.

    Est-ce que les règles changent si C1 et C2 sont dans le même thread ?

    J'ai envie de bien faire mais je suis dans le flou...

    Merci d'avance pour vos conseils.

  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
    Salut
    Citation Envoyé par SmallFitz Voir le message
    Quelle est la règle pour transmettre correctement A ?
    Par valeur, par adresse, par référence ou par référence constante ?
    entre 2 thread
    * si c’est une classe Qt ; ils implémente généralement le COW. Donc par valeur ou reference const.
    * Si c'est un QOject : a eviter.
    * si pod (int,float,...) : par valeur.
    * Sinon par reference const. Si les deux QObject sont dans le même thread il n'y aura pas de copie. Sinon il y aura une copier pour passer le paramètre entre les thread.

    J'ai lu que les pointeurs étaient déconseillés entre threads, car rien ne garanti que le pointeur n'est pas été détruit dans l'un ou l'autre thread.
    oui
    Par valeur j'ai parfois des messages d'erreurs 'vtable' (je ne suis pas certain que cela venait de là).
    c'est plutôt un problème de synchronisation entre les sources et les build.

    J'ai aussi lu qu'il fallait parfois utiliser qRegisterMetaType() mais je n'ai pas compris réellement quand, à part quand ça génère une erreur bien spécifique et que pour l'implémenter il fallait un constructeur par défaut, un constructeur de copie, et destructeur.
    Ca permet a Qt de savoir comment copier l'objet pour le transférer vers un autre thread.

    Et si A hérite de QObject ?
    L'idée serait que C1, qui utilise des A, émette un signal transmettant ces A à chaque création pour que l'extérieur puisse s'y connecter s'il le souhaite.

    Est-ce que les règles changent si C1 et C2 sont dans le même thread ?
    Il n'y as pas forcement une réponse et ca depend de ton context.
    J'aurais plutôt essayé de créer les QObject et créer les connexion dans un thread et utiliser movetothread.

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

Discussions similaires

  1. Signaux et slot entre plusieurs objets
    Par sepiropht dans le forum Qt
    Réponses: 9
    Dernier message: 26/06/2014, 11h58
  2. Réponses: 5
    Dernier message: 22/05/2012, 16h18
  3. [PHP 5.2] Transmission d'instance d'objet via les session
    Par Bugger24 dans le forum Langage
    Réponses: 10
    Dernier message: 11/09/2010, 18h39
  4. [Axis2]Problème de transmission d'objets via un web services
    Par Martin22 dans le forum Services Web
    Réponses: 2
    Dernier message: 24/08/2009, 17h38
  5. Réponses: 10
    Dernier message: 09/10/2005, 22h33

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