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

SDL Discussion :

application SDL à 100% du CPU?


Sujet :

SDL

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 34
    Points
    34
    Par défaut application SDL à 100% du CPU?
    Bonjour,

    En tatant un peu de threads, j'ai un truc qui me semble louche.

    En gros mon programme calcule la position d'une pomme dans le thread principale, et affiche aux coordonnées voulues une image de cette pomme de temps en temps.

    Ca marche mais je vois mon processeur qui est au max (du moins, le proc qui fait tourner le programme). Quand je regarde le détail, je me rend compte que mon programme ne prend que quelques %, mais parcontre j'ai Xgl à fond. Que je sois en mode fenetre ou plein écran ne change rien.
    Comment cela se fait il?

    Mon code, un peu codé à l'arrache, faites pas attention au style. Je sais également que le calcul n'est pas exact et qu'on peut faire beaucoup mieux, mais ce n'est pas mon probleme pour le moment :

    Code C : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include "SDL/SDL.h"
    #include "SDL/SDL_image.h"
    #include <stdio.h>
    #include <stdlib.h>
    #define HEIGHT 780
    #define WIDTH 1280
     
    #include <pthread.h>
     
    SDL_Surface *ecran=SDL_SetVideoMode(WIDTH,HEIGHT, 32, SDL_HWSURFACE);
     
    void* affichage( void*);
    int main(int narg, char **args)
    {
      SDL_Init(SDL_INIT_VIDEO);
      pthread_t* aff;
      // La position de la pomme
      SDL_Rect *position_pomme= new SDL_Rect;
      pthread_create(aff,NULL,affichage,position_pomme);
      //On centre a peu pres la pomme
      position_pomme->x=HEIGHT/2;   
      //On place la pomme en haut
      position_pomme->y=0;
     
      double y=0;
      double vitesse=10.9;
     
      /* Tant que la pomme n'est pas en bas*/
      while(y < HEIGHT)
        {
          //Calcul de la nouvelle position
          y+=vitesse;
          // Mise à jour de la position
          position_pomme->y=(int)y;
          usleep(1e5);
        }
      pthread_cancel(*aff);	
      SDL_Quit();
     
    }
     
    void* affichage( void* position){
    	SDL_Rect* position_pomme=(SDL_Rect *) position;
    	static SDL_Surface * pomme=IMG_Load("pomme.jpg");
    	while(1){
    	        // On efface l'écran
                   SDL_FillRect(ecran,NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                   // On affiche la pomme à sa position
                  SDL_BlitSurface(pomme,NULL,ecran,position_pomme);
                  SDL_Flip(ecran);
                  usleep(10000);
        }
    }

    Config : ubuntu 7.10 sur amd turion 64 x2, ATI RADEON X1270(driver flgrx), bureau compiz fusion.
    Commande unix pour compiler : gcc nomfichier.c -lpthread -lSDL -lSDLmain -lm -lSDL_image -o pgm

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    c'est quoi ca :

    ?????

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    oui désolé, c'est pas tres portable, c'est une pause de 1e5 µsecondes sous linux.

    Pendant que j'y suis, un petit "new" s'est glissé dans le code ... à traduire évidement par malloc(sizeof...)

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    l'expression 1e5 est interpretee par le compilateur comme un double...

    Que prend usleep comme parametre ????

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    normalement un entier, mais même en castant j'ai le même problème ...

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Et bien pour moi, ton code ne compile pas :
    test2.c:10: error: initializer element is not constant
    test2.c: In function ‘main’:
    test2.c:18: error: ‘new’ undeclared (first use in this function)
    test2.c:18: error: (Each undeclared identifier is reported only once
    test2.c:18: error: for each function it appears in.)
    test2.c:18: error: expected ‘,’ or ‘;’ before ‘SDL_Rect’
    test2.c:35: warning: implicit declaration of function ‘usleep’
    test2.c:13: warning: unused parameter ‘narg’
    test2.c:13: warning: unused parameter ‘args’
    test2.c: In function ‘affichage’:
    test2.c:44: error: initializer element is not constant
    Ensuite, tu ne prends aucune précaution entre le thread qui modifie la position et celle qui l'affiche...

    Enfin, utilise plutôt SDL_Delay...

    Jc

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 396
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 396
    Points : 20 504
    Points
    20 504
    Par défaut
    En tatant un peu de threads, j'ai un truc qui me semble louche
    est-ce vraiment utile d'utiliser des threads pour afficher une simple pomme ?
    SDL Open GL et Direct X consomment énormément de ressources..

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    est-ce vraiment utile d'utiliser des threads pour afficher une simple pomme ?
    SDL Open GL et Direct X consomment énormément de ressources..
    Non évidement, pour afficher une pomme c'est superflux, mais je voulais tester sur un élément simple avant de me lancer dans quelque chose de plus complexe. SDL consomme tant de ressource que ca? Parcequ'avec les pause que je fais, on devrait avoir un taux d'utilisation processeur tres bas.

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Sebsheep Voir le message
    Non évidement, pour afficher une pomme c'est superflux, mais je voulais tester sur un élément simple avant de me lancer dans quelque chose de plus complexe. SDL consomme tant de ressource que ca? Parcequ'avec les pause que je fais, on devrait avoir un taux d'utilisation processeur tres bas.

    Cela dépend de ton code et comment tu l'écris. La SDL peut consommer peu mais cela dépend sous quel système tu l'utilises, avec quel bibliothèque sous-jacente.

    Si tu prends directement les API des systèmes d'exploitation (Win32+DirectX pur par exemple), tu seras plus rapide mais non portable.

    Jc

  10. #10
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    qu'est ce que l'occupation du processeur devient si tu utilises SDL_Delay au lieu de usleep?

Discussions similaires

  1. Lancement application SDL linux
    Par foinfoin99 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 11/01/2009, 22h03
  2. Bug ie7 ? Code html pur qui fait prendre 100% de cpu à IE7
    Par Rakken dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 06/01/2009, 10h53
  3. Plantage d'application SDL sous Vista
    Par Scheb dans le forum SDL
    Réponses: 6
    Dernier message: 21/09/2008, 13h45
  4. msn prend 100% du CPU
    Par ogenki dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 02/05/2006, 14h12
  5. [mySQL]Requete qui prend 100 % du CPU et n'aboutit pas
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 20
    Dernier message: 12/10/2005, 09h36

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