Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage de paramètre

    16 mars 2008 à 12:48:49

    Bonjour bonjour :)

    Je poste car je programme sous Qt en ce moment et il m'est venu le besoin d'utiliser les threads. Je sais les manier sous SFML mais avec Qt j'ai un petit problème ... Comment puis-je faire passer des paramètres à la fonction run() ? et à quel moment dois-je les faire passer ? Bref, comment m'y prendre ?

    Voici un code test :

    Thread.h :
    1. #ifndef DEF_THREAD
    2. #define DEF_THREAD
    3. #include <QThread>
    4. #include <QSlider>
    5. #include <fstream>
    6. class ThreadSlider : public QThread
    7. {
    8.     public:
    9.     void run(void *UserData);
    10. };
    11. #endif


    Thread.cpp :
    1. #include "Thread.h"
    2. void ThreadSlider::run(void *UserData)
    3. {
    4.     int *val = static_cast<int*>(UserData);
    5.     ofstream fichier("deb.txt", ios::binary | ios::trunc);
    6.     fichier << "val : " << *val;
    7. }


    Initialisation :
    1. ThreadSlider thread_slider(val);
    2. thread_slider.start();
    3. thread_slider.wait();


    Ou/quand faire passer mon/mes paramètre(s) ?
    • Partager sur Facebook
    • Partager sur Twitter
      16 mars 2008 à 15:04:11

      Euh ben... Tu lui passes bien un paramètre là à la fonction run au moment du lancement ?
      • Partager sur Facebook
      • Partager sur Twitter
        16 mars 2008 à 15:20:46

        a quoi ils servent les threads?
        • Partager sur Facebook
        • Partager sur Twitter
        :)
          16 mars 2008 à 15:37:12

          Sauf que au moment du lancement il faut faire appel à la fonction start() qui appelle run() mais elle n'accepte pas les paramètres autre que &QThread :( . Le thread sert à déplacer le slider en temps réel c'est-à-dire en fonction d'un fichier son que je lit et donc sans l'intervention de l'utilisateur, je n'ai pas trouvé comment faire autrement, si tu as une solution je suis preneur mais j'aimerais résoudre ce problème de passage de paramètre dans un thread car cela me servira à coup sûr à un moment ou un autre.

          Merci :)
          • Partager sur Facebook
          • Partager sur Twitter
            16 mars 2008 à 15:49:59

            Une fois j'ai vu que les thread de Qt ne fonctionnais que sous windows c'est vrai?
            • Partager sur Facebook
            • Partager sur Twitter
            :)
              16 mars 2008 à 17:00:33

              Citation : moii

              a quoi ils servent les threads?


              Les servent sont ce qu'on appelle des "processus légers".
              En gros, quand tu lances un programme tu crées un processus. Et cette création est très coûteuse pour l'OS. (je rentre pas dans les détails), de même que les moyens de communication, les IPC qui existent.

              L'avantage des threads est qu'ils partagent tous une partie du programme (les variables globales entre autres) et que leur mise en oeuvre est beaucoup moins coûteuse.
              Un exemple avec la SDL : tu pourrais avoir un thread d'affichage et un thread pour récupérer les événements. Celui-ci pourrait donc utiliser WaitEvent sans pour autant bloquer la boucle d'affichage !

              Citation : moii

              Une fois j'ai vu que les thread de Qt ne fonctionnais que sous windows c'est vrai?



              Qt se veut une librairie multiplateforme, donc sur ce point on t'aura menti !
              Les threads Qt marchent sur toutes les plate-formes pour lesquelles Qt est fourni :
              - sous Windows et Linux, ce n'est qu'un bête encapsulage des apis threads natives (je-sais-jamais pour Win32, et pthread pour Linux).
              - Sur toutes les autres plateformes, Qt fourni sa propre implémentation des threads.

              Que ceux qui en savent plus corrigent les quelques fautes que j'aurais pu faire, je suis pas expert dans le domaine, mais il me semble que basiquement, c'est l'idée.
              • Partager sur Facebook
              • Partager sur Twitter
                16 mars 2008 à 19:24:30

                Merci pour les renseignements. Mais l'on s'écarte un peu du sujet ;) Quelqu'un aurait-t-il connaissance du fonctionnement des threads sous Qt ? En tout cas sur le transtypage et le passage des paramètres ?

                Merci bien
                • Partager sur Facebook
                • Partager sur Twitter
                  16 mars 2008 à 20:00:06

                  Et si tu mettais tes params dans ta classe ThreadSlider ? Je dis ça comme ça hein...
                  Par contre, têtre penser à mettre des QMutex pour les getters/setters. Sinon apparemment (regardé la doc en diagonale), y'a les QDataStorage qui sont faits pour ça...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 mars 2008 à 18:59:35

                    Bah les paramètres dans la classe ThreadSlider sa va pas très bien puisque ma classe doit agir sur un slider déjà existant :s
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 mars 2008 à 19:19:09

                      QThread est une classe à hériter comme tu le fais...

                      Alors le seul moyen d'utiliser des paramètres est de les créer dans ta classe et de les initialiser avant le start.

                      Le fonctionnement du thread doit être dans la fonction run() que tu défini. Cette fonction doit avoir la MÊME signature que la fonction virutelle pure de la classe QThread.

                      Pour les objets externe qui peuvent évoluer pendant le déroulement du programme tu dois utiliser des pointeurs.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mars 2008 à 21:05:33

                        ... (continuité du post précédent) et également mettre en place des mécanismes veillants à prévenir les accès concurrents si ces objets sont destinés à être lus et/ou modifiés par différentes entités. (sauf erreur de ma part).
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Passage de paramètre

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown