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

wxWidgets Discussion :

wxThread et lenteur


Sujet :

wxWidgets

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Points : 28
    Points
    28
    Par défaut wxThread et lenteur
    Bonjour,

    Voici mon problème : j'ai une classe GL_Window qui me permet de faire du rendu OpenGL, j'ai donc mon membre Render appelé à l'aide d'un timer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void GL_Window::Render()
    {
       ProcessRendering();
    }
     
    void GL_Window::ProcessRendering()
    {
       // Rend et affiche par des fonctions OpenGL...
    }
    Dans ce cas-là, tout va bien, CPU à 0%, très fluide. Sauf que je me suis dit que j'allais créer un thread qui permette de décorreller l'affichage et le reste. J'ai donc un pointeur vers un RenderingThread hérité d'un wxThread dans GL_Window. Et je fais ça :

    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
    24
    25
    26
    27
     
    void GL_Window::Render()
    {
       if( !RThread )
    	{
    		RThread=new RenderingThread(this);
    		if( RThread->Create() == wxTHREAD_NO_ERROR )
    		{
    			RThread->Run();
    		}
    	}
    }
     
    void GL_Window::ProcessRendering()
    {
       // Rend et affiche par des fonctions OpenGL...
    }
     
    void* RenderingThread::Entry()
    {
       Parent->ProcessRendering();
    }
     
    void RenderingThread::OnExit()
    {
       Parent->RThread=NULL;
    }
    Et là, c'st le drame. Le simple fait de passer par un thread pour faire le rendu me pourrit l'application : CPU à 100% ou pas loin, et évidemment ça rame.

    Quelqu'un aurait une idée de l'origine du problème ??

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Ton thread tourne à fond sans sleep, donc il utilise le maximum de la puissance processeur disponible, donc c'est logique que le processeur soit à 100%.

    Faire un thread pour l'affichage est pas forcément une bonne idée. Car il faut que cela se synchronise avec les wxWidgets.

    Le mieux est de threader le calcul des données pour l'afficher dans ton thread principale qui affiche les données.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Le thread tourne à fond, je suis d'accord, mais il est vite détruit car c'est un thread défini comme étant wxTHREAD_DETACHED (à chaque fois que sa fonction Entry() est finie, donc à chaque fin de rendu).

    Je suis en train de me demander si le problème de lenteur ne vient pas du fait que j'instancie et supprime un thread à chaque rendu (soit environ 60 fois par seconde) ...

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Si, un thread ce n’est pas spécialement léger.

    Et comme je l'ai indiqué, peut être pas adapté à tes besoins.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    En effet, cela venait de la création de threads. J'ai utilisé un thread joignable, qui contient un sleep, et ça ne rame plus.

    Pour ce qui est de l'affichage dans le thread principal, ce qui m'intéressait dans le fait de séparer l'affichage des fenêtres opengl du thread principal, c'était de pouvoir faire del'affichage couteux en temps, sans que cela n'impacte mon interface graphique classqieu de WxWidgets (boutons...).

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Oui dans ce cas, tu n'as pas trop de choix
    Mais il faut bien mutexer.

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

Discussions similaires

  1. [LG]Lenteur de parcours de fichier
    Par YéTeeh dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2003, 23h57
  2. [Débutant] Lenteur avec TComPort
    Par PhDt76 dans le forum C++Builder
    Réponses: 22
    Dernier message: 27/09/2003, 22h43
  3. lenteur d'affichage de requete dans un DBGrid
    Par nico27 dans le forum InterBase
    Réponses: 9
    Dernier message: 23/06/2003, 14h54
  4. [Sybase]probleme de lenteur
    Par MASSAKA dans le forum Sybase
    Réponses: 3
    Dernier message: 19/03/2003, 23h58
  5. Lenteur d'execution de Jbuilder 6
    Par Tsimplice dans le forum JBuilder
    Réponses: 6
    Dernier message: 18/12/2002, 15h41

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