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

Qt Discussion :

Ralentissement énorme


Sujet :

Qt

Vue hybride

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

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut Ralentissement énorme
    Bonjour tous,

    j'ai un code qui me permet de calculer des valeurs de plusieurs courbes, lorsque je compile ce code avec code block ou un autre IDE alors j'ai un resultat en 10secondes.

    J'ai fais une interface graphique avec Qt pour tracer les courbes, le probleme et que le temps de calcul est devenu enorme comparativement au 10sec:

    => ça passe de 10seconde à presque 1minute !

    je voudrais savoir si c'est normal que je code soit autant ralenti ?

    => j'ai un ami qui avait quelque chose d'un peu pret similaire il y a quelques temps sous C++ builder et le ralentissement etait presque quasi inexistant...

    Je vais mettre un bout de code qui permet de montrer comment je fais pour mettre à jour mon graphique à chaque iteration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int timeNb4=Points2_OneXtwoY.size();
               QVector<double> x4(timeNb4);
               QVector<double> y4(timeNb4);
               //i fill Qvectors
               for (int z=0;z<timeNb4;z++)
               {
                  x4.append( Points2_OneXtwoY[z][0] );
                  y4.append( Points2_OneXtwoY[z][1] );
               }
               myPlot4->replot();
               Total.setSamples(x4.data(),y4.data(),x4.size());
               repaint();

    peut etre que mon probleme vient du faire que je fasse replot ou repaint ?

    => comment faites vous si vous voulez mettre à jour votre interface graphique, quelle fonction utilisez vous?

    j'espere que vous pourrez m'aider

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Par défaut
    Ah oui les opération de refresh, repaint etc sont souvent gourmandes, ça ne sert à rien de les faire 500x par secondes de toute façon.

    Essaie en commentant la ligne pour voir si c'est ça qui ralenti.

    Alors tu fait ton repaint à la fin de ta boucle, lq le traitement est terminé.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    en fait ce que je veux faire c'est un graphique qui au fur et à mesure de l'execution me trace les points

    => en fait je crois que un de mes problemes et que je retrace à chaque fois toute la liste des points + le dernier calculé

    => en fait il faudrait que je retrace seulement le dernier a chaque fois mais que sur l'affichage les précédant points calculé soient toujours présent

    savez vous comment faire? quelle fonction utiliser? je ne crois pas que repaint permettent de faire ceci?

    ps: je ne peux pas tester en ce moment

    Citation Envoyé par ness522 Voir le message
    Alors tu fait ton repaint à la fin de ta boucle, lq le traitement est terminé.
    je n'ai pas compris cette phrase, que voulez tu dire ?

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Par défaut
    Citation Envoyé par BdidB Voir le message
    comment je fais pour mettre à jour mon graphique à chaque iteration
    je veux juste dire de ne pas rafraichir le widget à chaque itération, mais à la fin du traitement des données.

    à moins que tu ne doives visualiser des choses qui bougent ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    Citation Envoyé par ness522 Voir le message
    à moins que tu ne doives visualiser des choses qui bougent ?
    c'est exactement ce que je veuc faire mais je ne sais pas comment le faire d'une façon qui ne fasse pas tout ramer

    => je pense que c'est possible car je connaissais quelqu'un qui utilisé C++builder et ça fonctionné tres bien sans trop ramer

    le probleme c'est que je ne sais pas quoi utiliser avec Qt pour ne pas trop faire ramer le rafraichissment

    => c'est peut etre dû au fait que je retrace tout à chaque fois?
    je ne devrais retracer que le dernier resultat mais comment garder ce qui a été affiché précédemment?

  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

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    je n'ai pas vraiment saisi la différence entre les deux mais ce que j'ai compris c'est que repaint() est responsable du ralentissement que j'ai.

    => j'ai donc testé en remplacent le repaint() par un update() et en effet ça ne rame plus mais gros probleme:

    => au lieu de m'afficher les différents point du graphique au cours de l'execution ça ne m'affiche que le dernier tracé

  8. #8
    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
    Le repaint correspond à un appel de la méthode paint. Donc tu n'arrêté pas de redessiner pour rien.
    Le update schedule le repaint au travers de l'eventloop.
    Vue qu'il n'y as plus rien qui s'affiche tu doit surement bloquer le thread principale.

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

Discussions similaires

  1. Normes de programmation
    Par CanardJM dans le forum Débuter
    Réponses: 2
    Dernier message: 21/06/2004, 01h57
  2. Normes postgresql
    Par baboune dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/03/2004, 14h00
  3. Norme SQL ansi 92
    Par Superstivix dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/02/2004, 15h44
  4. wxWindows et DevC++ : taille de l'exe énorme !
    Par ovh dans le forum Dev-C++
    Réponses: 7
    Dernier message: 19/11/2003, 17h01
  5. Normes EDI
    Par f-demu01 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 14/03/2003, 08h22

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