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 :

Bien utiliser QThread et moveToThread()


Sujet :

Multithreading

  1. #1
    Membre éprouvé
    Bien utiliser QThread et moveToThread()
    Mise à jour : 24/08/2010

    Un traduction issue des Qt labs blog expliquant comment bien comprendre et utiliser la fonction moveToThread() est maintenant en ligne :

    Vous vous y prenez mal...

    Bonne lecture !

    Utiliser vous cette fonction dans vos threads ? Cette explication vous a-t-elle apportée un plus sur l'utilisation que vous en faites ?

    Citation Envoyé par Mise à jour : 22/08/2010


    L'article sur l'exemple du bon usage de QThread a été traduit et est disponible :

    Les threads sans maux de tête

    Que pensez-vous de cette méthode ? Est ce que vous l'utilisez ?

    Citation Envoyé par Message original
    Bonjour,

    J'ai lu cet article il y a quelques jours, et en reparcourant ce forum, j'ai remarqué une chose : trop peu de personnes ont lu cet article !

    C'est en anglais (mais on a une équipe de traducteurs fous, hein ?) mais cet article contient toute la vérité sur le bon usage de QThread.

    J'invite tout le monde à le lire : You're doing it wrong !
    Et voici un exemple du bon usage de QThread (même si l'article avait été écrit avant que cela soit possible):http://labs.trolltech.com/blogs/2006/12/04/threading-without-the-headache/

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  2. #2
    Invité
    Invité(e)
    Il me semble qu'il y a un article en préparation à ce sujet...

  3. #3
    Rédacteur

    Il me semble qu'il est en cours de traduction.

    mais cet article contient toute la vérité sur le bon usage de QThread
    Je dirais plutôt une des vérités. Si tu n'utilise pas l'eventloop dans la thread, cette méthode ne sert à rien.

    Le trés gros avantage que j'y voie et que l'on ne réfléchie pas directement en multithread.
    On créé un QObject qui propose des slots et emet des signaux. Ensuite on peut choisir que l'object s'exécute dans un thread particulier si besoin.

    Il ne faut pas oublier les QtConcurrent qui sont une trés bonne alternative dans de nombreux cas.

  4. #4
    Membre éprouvé
    Si tu n'utilise pas l'eventloop dans la thread, cette méthode ne sert à rien.
    Je suis d'accord, mais ça reste 95% des cas qu'on voit ici.

    Et en effet, à d'autres besoins, d'autres solutions (QtConcurrent ou autre).

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  5. #5
    Membre éprouvé
    Je ne suis pas sur que ce soit la meilleure methode (d'utiliser les signaux pour faire la synchro).
    en fait c'est un lock caché (comment les messages sont synchronisés), et je ne suis pas sur que ca marche avec plusieurs consommateurs....

  6. #6
    Rédacteur

    L'article sur l'exemple du bon usage de QThread a été traduit et est disponible :

    Les threads sans maux de tête

    Que pensez-vous de cette méthode ? Est ce que vous l'utilisez ?
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  7. #7
    Rédacteur

    Un traduction issue des Qt labs blog expliquant comment bien comprendre et utiliser la fonction moveToThread() est maintenant en ligne :

    Vous vous y prenez mal...

    Bonne lecture !

    Utiliser vous cette fonction dans vos threads ? Cette explication vous a-t-elle apportée un plus sur l'utilisation que vous en faites ?
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  8. #8
    Membre actif
    no so wrong

  9. #9
    Rédacteur

    Que s'il commence par faire un moveToThread(this) ils sont mal barrés .

    Quand tu hérite de QThread, il faut surtout faire attention à tes slots car il ne sont pas exécuté dans ton thread. Ou pire si tu as fait moveToThread(this) il ne seront pas exécuté si le signal viens d'un autre thread. De mon expérience, si tu as besoin d’hériter de QThread, autant créé un thread système ou utiliser les QtConcurrent ou un pool de thread.

    Pour moi, faire des QObject + moveToThread est plus flexible. Typiquement, cela te permet de créer un nombre de thread limités tout en optimisant leurs utilisations et s’intégrant bien dans l'utilisation de Qt.