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 :

Probleme utilisation du cpu


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut Probleme utilisation du cpu
    J'ai un petit souci bien embetant. J'ai fait un programme sous linux qui permet de controler un palet, et de se cogner a tous les bords de la fenetre. Sous linux, pas de probleme.
    Par contre sous windows, mon cpu devient fous. Le programme consomme 60% du cpu de mon portable(quand meme un amdSempron 3000+) alors que je ne demande que 60 image secondes.
    Par contre, des que je reduit ma fenetre, l'utilisation retombe a 2%.

    Du coup, je fait un autre programme test, ou je lui demande d'afficher seulement une fenettre avec un fonc, mais toujours a 60 image secondes.
    Resultat : toujours 60% du cpu d'utilisé !!!
    Et a 40 images secondes, j'ai 40% du cpu d'utilisé!!!

    Je met le code source en fichier joint et je met ici la boucle principale:
    while ( game_running )
    {
    SDL_Flip(ecran);
    game_running=update_event();
    SDL_Delay(time_left()); /*peut etre c'est elle qui ne va pas*/
    next_time += TICK_INTERVAL;
    }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Par défaut
    pour savoir si c'est la fonction timeleft() qui ne marche pas, remplace là par une constane: timeleft(25);
    (25ms, tu devrais avoir a peu près 40 fps sauf si update_event() prend bcp de temps.)

    Si avec cette modification ton programme s'exécute aussi rapidement sous win que sous linux, ça veut dire que c'est timeleft() qui ne marche pas bien sous windows.
    Sinon, c'est autre part que se situe le problème.


    edit: en regardant ton prog, j'ai rien trouvé qui clochait, mais j'ai peut être une piste: peut être que linux fait tourner ton cpu à fond, tandis que windows regule sa vitesse... d'où un plus grand pourcentage d'utilisation sous windows
    Un conseil, laisse tomber linux et dev pour un vrai OS

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    J'ai remplacer time_left par une constante, mais j'ai toujours le meme probleme. snif !

    Ce que j'ai fait aussi, c'est que j'ai mit un compteur,
    pour savoir combien de fois le programme dépasse le temps imparti (1000ms / fps) pour faire ses calculs
    et j'ai aussi mis un compteur pour savoir combien de fois il est en avance auquel cas il doit attendre un peu.

    Voila le genre de truc que j'ai sous dows a 60 fps:
    pas assez de temps : 135 avec en moyenne un depassement de 37.451852ms
    attendre : 995 avec comme moyenne ; 2.207035ms a attendre pour une attente maxi de 16.666667

    Je précise que mon cpu tourne bien a 1,8 ghz !!!


    J'ai fait la meme chose sous nunux, mais la pas de probleme :
    pas assez de temps : 0 ou des fois 1.
    attendre : toutes les autres fois.

    Et ce meme quand je descent le cpu a 800 mhz !!!


    Du coup j'ai tester un peu toutes les procedures pour savoir laquel pose probleme.
    Et j'ai trouver c'est SDL_Flip(ecran);

    Parce que ma boucle principale ainsi réécrite utilise 2% du cpu !!!
    while ( game_running )
    {
    //SDL_Flip(ecran);
    game_running=update_event();
    SDL_Delay(time_left());
    next_time += TICK_INTERVAL;
    }

    Mais franchement, je ne voit pas comment me passer de SDL_Flip(ecran); !!!
    help !!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Par défaut
    Tu peux pas te passer de SDL_Flip en utilisant SDL_UpdateRect, mais pas tous les jeux peuvent en bénéficier.
    C'est quand même assez bizarre que ça prenne au temps de temps. Peut être que ta surface "ecran" ou ton écran ne sont pas initialisées de façon optimale (je crois qu'il faut que la surface soit lockée et que la fenêtre utilise le double buffering HW), mais ça n'explique pas la différence entre windows et linux...
    Peut être que l'implémentation de SDL_Flip est différente entre les 2 OS, peut être que le nombre de bpp sous windows est != que sous linux, etc...

    Bonne chance pour régler ce problème

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    Citation Envoyé par Jyaif
    Bonne chance pour régler ce problème
    merci!

    Par contre, je voudrais savoir si vous avez le meme probleme dans vos jeux.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Par défaut
    dans les menus d'un de mes jeu, avec une fenêtre de 800x600 avec un SDL_Delay(15), j'ai 10% du cpu d'utilisé.
    Essaye d'initialiser ecran avec SDL_HWSURFACE | SDL_DOUBLEBUF (moi c'est ce que je fais)

Discussions similaires

  1. probleme utilisation de iis
    Par seb833434 dans le forum IIS
    Réponses: 2
    Dernier message: 15/06/2006, 17h19
  2. Probleme utilisation d'Objets managé grace a gcroot
    Par pepefourras dans le forum MFC
    Réponses: 4
    Dernier message: 16/05/2006, 00h26
  3. [Eclipse 3.1 et WTP 0.7M5] Utilisation du CPU à 100%
    Par stanislas dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/07/2005, 23h21
  4. [Windows 2003 Server] Problème d'utilisation du CPU
    Par Quentin dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 11/04/2005, 11h26
  5. Trouver le % d'utilisation du CPU
    Par le mage tophinus dans le forum Assembleur
    Réponses: 20
    Dernier message: 21/04/2003, 19h43

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