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 :

Les thread Qt


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Les thread Qt
    Bonjour.

    Je souhaiterais créer un Thread via Qt. La documentation propose quelques exemples concernant ces derniers, néanmoins, ca ne convient pas réellement à mes attentes.

    Il semblerais que sous Qt, un Thread nécessite la création d'une classe. Je souhaiterais faire abstraction de ce point, pour, non pas avoir une classe, mais simplement une méthode. Quelque chose du style CreateThread(), mais spécifique à Qt.

    Est-ce possible ? Et si oui, de quelle manière ?

    Cordialement,
    PKO

  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
    Citation Envoyé par Altess Voir le message
    Je souhaiterais créer un Thread via Qt. La documentation propose quelques exemples concernant ces derniers, néanmoins, ca ne convient pas réellement à mes attentes.

    Il semblerais que sous Qt, un Thread nécessite la création d'une classe. Je souhaiterais faire abstraction de ce point, pour, non pas avoir une classe, mais simplement une méthode. Quelque chose du style CreateThread(), mais spécifique à Qt.
    Difficile de te répondre comme cela. A la limite je te dirait de regarder les QtConcurrent, mais tout dépend de cette question

    Que veut tu faire avec cette thread?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour et Merci d'avoir replacer le post.

    En fait j'ai une classe qui hérite d'un QWIdget.

    class FenInstall: public QWidget, private Ui::Form_install{...}

    Et dans ce QWidget, j'ai une ListBox qui indique les étapes de mon application, du style :

    - Etape 1 : Analyse ... Terminée
    - Etape 2 : Création ... Terminée
    [...]
    - Etape n : Fin de l'application
    Le soucis, c'est que mes indications n'apparaissent pas au fur et à mesure, mais toutes d'un coup, a la fin de l'application. J'ai donc tenter ca :

    class FenInstall: public QWidget, private Ui::Form_install, public QThread

    Ceci, dans le but d'utiliser une méthode Run dans ma classe. Mais ça fonctionne pas. En gros, je n'arrive pas a utiliser les Thread dans la classe qui hérite déjà de QWidget. Il semblerais que depuis la version 4, l'héritage QWidget / QThread ne fasse pas bon ménage.

    Je me suis donc orienter vers la création d'une méthode Thread, qui se verra passer en paramètre mes indications a afficher dans la listeBox.

    Après, il est fort probable que ce soit pas la bonne solution cette histoire de méthode Thread. Si vous avez une idée de comment faire pour utiliser les Thread dans ma classe QWidget, je prend.

    Cordialement,
    PKO

  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
    Citation Envoyé par Altess Voir le message
    Le soucis, c'est que mes indications n'apparaissent pas au fur et à mesure, mais toutes d'un coup, a la fin de l'application. J'ai donc tenter ca :

    class FenInstall: public QWidget, private Ui::Form_install, public QThread
    alors là, je t'arrête tous de suite, JAMAIS de traitement IHM dans un THREAD
    Dans ton cas, je proposerais trois solutions :
    1- tu appel régulièrement la fonction static QCoreApplication::processEvents pour permettre la partie IHM de faire ses traitement

    2- Tu créé un thread qui te fait l'installation et transmet son avancement vers l'ihm par des signal/slot

    Vue ton cas la première semble amplement suffisante. Je ne vois pas beaucoup d'intérêt à utiliser un thread. Par contre découpe bien les étapes en fonction. Il te faudra surement pouvoir stopper l'installation.

    Pour bien te former tu peu voir aussi les tutoriels et cours pour apprendre Qt : http://qt.developpez.com/tutoriels/

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Yan > Merci pour ces informations. En ce qui concerne la remarque "JAMAIS de traitement IHM dans un THREAD", je met ça dans un coin de ma tête, et je ne referais plus la bêtise .

    Effectivement, la méthode "QCoreApplication::processEvents" marche à merveille, c'est exactement ce que je cherchais. Je vais jeter un oeil dans la doc pour savoir ce qui se passe vraiment lors de l'appel.

    L'étape 2 me sera sans doute utiles un jour ou l'autre, néanmoins, elle me semble bien complexe. Est-ce accessible, ou bien vraiment trop complexe ?

    Enfin, "Dans ton cas, je proposerais trois solutions :". Y'en à une troisième ou pas, juste pour info ?

    Merci encore.
    Cordialement,
    PKO

  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 Altess Voir le message
    Effectivement, la méthode "QCoreApplication::processEvents" marche à merveille, c'est exactement ce que je cherchais. Je vais jeter un oeil dans la doc pour savoir ce qui se passe vraiment lors de l'appel.
    Ca execute ce qu'il y as dans l'eventloop. Comment le rafraichissement de l'ihm par exemple.

    L'étape 2 me sera sans doute utiles un jour ou l'autre, néanmoins, elle me semble bien complexe. Est-ce accessible, ou bien vraiment trop complexe ?
    Oui et non. Mais si on peut se passer de thread autant évité

    Enfin, "Dans ton cas, je proposerais trois solutions :". Y'en à une troisième ou pas, juste pour info ?
    J'avais une troisième idée avec QtConcurrent::run, mais je ne suis pas sure que cela vaille le coup

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

Discussions similaires

  1. Aide sur les Threads
    Par themoye dans le forum MFC
    Réponses: 24
    Dernier message: 06/03/2005, 15h02
  2. Les Threads... J'en remet une couche :)
    Par Higestromm dans le forum C++
    Réponses: 5
    Dernier message: 17/11/2004, 12h19
  3. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25
  4. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

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