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 :

Utiliser Qt sans avoir pieds et mains liés


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Utiliser Qt sans avoir pieds et mains liés
    Bonjour à tous,


    J'ai testé Qt récemment, ça a l'air pas mal, mais j'ai peur d'un truc :
    Qt propose plein de librairies en plus des IHM, et j'ai peur qu'utiliser Qt pour les IHM nous contraint à devoir utiliser Qt pour le reste.

    Par exemple, sur une IHM Qt, j'étais obligé d'utiliser les QThread après avoir tenté d'utiliser boost::thread. Est-ce que c'est récurrent ? Est-ce que tout élément juxtapposé à l'IHM devra être des éléments de Qt ?


    Merci,

    A bientôt

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut,
    Par exemple, sur une IHM Qt, j'étais obligé d'utiliser les QThread après avoir tenté d'utiliser boost::thread.
    Je ne comprends pas pourquoi tu es obligé d'utiliser QThread... Qt est compatible avec tous les standars du code, dans quelques modules que ce soit.

    La seule "chose" est qu'il faut parfois convertir un type d'une bibliothèque en un type Qt (ou inversement) pour les rendre compatibles. Mais strictement rien ne t'oblige à tout faire avec Qt si tu veux juste utiliser la partie IHM.

    G.

  3. #3
    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
    Qt à été découper en module justement pour cela. Rien ne t'empêche d'utiliser des thread boost.
    Tu peut même mixer les signal/slot de boost et Qt :
    http://irmatden.developpez.com/tutor...boost-signals/

  4. #4
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Cela dit, il vaut mieux utiliser des éléments extérieurs à Qt uniquement quand celui-ci ne les fournit pas de base car ça peut vite devenir problématique en termes de portabilit.

    Il devient plus difficile d'identifier un problème par exemple. (quelle bibliothèque est à mettre en cause ?)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Le problème était que l'on ne pouvait pas "toucher" à l'IHM depuis un autre Thread.

    En effet, mon module doit pouvoir être exporté sur d'autres projets, donc je n'ai pas utilisé les signaux Qt dedans. J'ai préféré utiliser le pattern Observer.

    Donc en entrant dans le callback de la boîte de dialogue, le code est exécuté par mon boost::thread. L'application plantait avec une exception m'informant que je ne pouvais pas toucher à l'IHM via un processus différent de celui qui l'a créé.

    Pour tester, j'ai remplacé mon boost::thread par un QThread, et là ça a fonctionné

  6. #6
    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 mister3957 Voir le message
    Le problème était que l'on ne pouvait pas "toucher" à l'IHM depuis un autre Thread.
    !!!!!!!!!!!!!!!STOP!!!!!!!!!!
    JAMAIS D'IHM DANS UNE THREAD

    et c'est valable pour la plupart des lib graphique. La raison principale est que la plupart des GDI ne sont pas thread safe.


    Pour tester, j'ai remplacé mon boost::thread par un QThread, et là ça a fonctionné
    Ca c'est parce que tu as mal utilisé QThread

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    QThread a fonctionné car je l'ai mal utilisé ? Curieux ça, mais bon admettons.

    Dans ce cas, et là ça c'est un peu (voir beaucoup) or sujet, comment accéder à l'IHM depuis un autre thread ?
    Il doit bien y avoir une solution tellement c'est courrant.

    Pour se remettre dans le contexte, j'ai une librairie de gestion de donnée qui possède un chargeur. Ce chargeur notifie "J'atttaque les clients, il y en a 2000... Je suis au 1er, je suis au 2ème, [...] je suis au 2000ème, J'ai fini !, J'attaque les produits.. etc.." via le pattern Observer.

    L'IHM possède une barre de progression et donc, est connecté au chargeur pour recevoir ce genre d'évennements et se mettre à jour.

    J'ai trouvé une solution, mais ça fait un peu porno des années 70, c'est crade. C'est le fait de faire un timer dans l'IHM qui va interroger le chargeur pour savoir où il en est, afin de se mettre à jour....

    Comment font les "pro" pour faire ça ? Comment ça se fait que mon QThread a fonctionné impéccablement pour faire ça ?

    Merci pour ta réponse

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/06/2011, 12h53
  2. Réponses: 6
    Dernier message: 27/10/2008, 11h56

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