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 :

OpenGL et threads


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut OpenGL et threads
    Bonjour,

    je code une application pour un algorithme 2OPT sur le problème du TSP. J'ai une interface graphique en QT qui affiche le poids du tour (cycle hamiltonien) dans un lineEdit et qui affiche le cycle dans une fenêtre openGL :



    Mon problème, c'est que je voudrais voir les étapes du 2opt en temps réel et donc rafraichir la fenetre Qt. J'ai essayer un QThread mais sa ne fonctionne pas :

    DEUX_OPT.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class DEUX_OPT : public QThread
    {
        private:
            Vue * _vue;
     
        public:
            DEUX_OPT();
            ~DEUX_OPT();
     
            void run()
            {
                while (!STOP)
                {
                    // Algoritme
     
                    _vue->updateGL();
                    _vue->majPoids(poids);
                }
            }
    };
    Vue.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include "ui_FenetreDesigner.h"
     
    class Vue : public QMainWindow
    {
        Q_OBJECT
     
        private:
            Ui::VueClass _ui;
     
        public:
            Vue(QWidget * parent = 0);
            ~Vue();
     
            void updateGL()
            {
                _ui.widget->updateGL(); // Appel 'paintGL()'
            }
     
            void majPoids(int poids)
            {
                _ui.lineEdit->setText(QString::number(poids));
            }
    };
    Les classes ont été simplifiés.
    Le bouton 'START' appelle la méthode 'start' du DEUX_OPT.


    Si j'enlève le 'public QThread', la fenêtre openGL est rafraichit mais pas le lineEdit.

    Merci.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Salut

    Si tu appelles directement vue->update, tu appelles une fonction d'un objet dans le thread principal ou de rendu à partir de ton thread de calcul. Pas génial.

    Le mieux est d'utiliser la boucle d'events du thread principal, en envoyant directement un event ou un émettant un signal (qui utilise pas défaut la boucle d'events quand on est en multithread)

    Il faut également faire attention qu'il n'y a pas d'accès concurrent en même temps sur les données qui sont affichés. Dans ton cas, puisque le thread de rendu ne fait que lire les donnés, il faut juste que le thread de calcul ne modifie pas les données pendant le rendu. Tu peux en faire une copie ou travailler sur 2 jeux de données par exemple

    (HS : et pour rappel, le message "mais sa ne fonctionne pas" n'est pas un message d'erreur valide)

Discussions similaires

  1. Rendu opengl multi-thread
    Par mick22 dans le forum Android
    Réponses: 4
    Dernier message: 26/02/2009, 16h21
  2. opengl et thread
    Par clemt dans le forum OpenGL
    Réponses: 14
    Dernier message: 11/07/2007, 15h05
  3. OpenGL et thread
    Par Kaktus dans le forum OpenGL
    Réponses: 8
    Dernier message: 09/07/2007, 08h28
  4. Rendu OpenGL sur un thread tier.
    Par Groove dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/02/2007, 11h36
  5. boost::thread et OpenGL
    Par Kurisu dans le forum Boost
    Réponses: 12
    Dernier message: 19/09/2006, 13h23

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