Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mon ordinateur fait un drôle de bruit (bon titre de fim lol)

dans le genre: CA VA EXPLOSER!!!!!!!!!!!!!!!!!!

Sujet résolu
    16 juin 2007 à 17:40:02

    Salut tout le monde,

    En fait, à chaque fois que je lance mon programme, et que je fais un ou deux trucs avec (j'ai pas fais un programme pour rien quand même ^^ ) au bout de quelque seconde le bruit du ventilo se met à monter crescendo, et ça fait vraiment peur ( :-° ); en fait, au bout d'un moment ça se stabilise, mais bon c'est quand même un peus inquétant.
    Au début j'ai crue à une fuite de mémoire, mais quand je fait ctrl+alt+sup que je vais dans processus et que je regarde combien de mémoire vive me mange le programme rien ne change (autour de 15000 ko); donc pas de fuite de mémoire (sinon ce chiffre monterait où ça serait tout simplement pas le problème du son douteut que me fait mon ventilo).

    J'avoue que ça m'inquiète un peus; mon ordi et du genre un peus bruyant (par rapport à d'autre) mais quand même il ne vat jamais jusqu'à ce point.

    Merci de m'aider.
    Ps: Le sujet n'est pas vraiment en rapport avec le c++, mais comme je programme en c++ et que le problème se présente quand j'éxécute ce programme, et que je ne vois pas où ailleur le mettre, je l'ai mis ici :D .
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 juin 2007 à 18:34:15

      Donne nous le code source, ou l'exécutable pour qu'on le teste :-° !
      Sinon, je ne vois pas trop comment t'aider...
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2007 à 18:53:06

        Bon bas on y va:

        Le main.cpp:
        #include <iostream>
        #include <string>
        #include <SDL/SDL.h>
        #include <SDL/SDL_Image.h>
        #include <SDL/SDL_ttf.h>
        #include "SDLG.h"



        using namespace std;


        int main(int argc, char *argv[])
        {
          SDL_Event event;
          int continuer=1, mouv=0, A=0, B=0, p=0;
          SDL_Surface*ecran;
          int aff1=1;
          long a=0, b=0;


          /* initialisation de la SDL*/
          SDL_Init(SDL_INIT_VIDEO);
          SDL_WM_SetCaption("   Test c++ et classe SDL  ", NULL);
          SDL_WM_SetIcon(IMG_Load("nuinui4.png"), NULL);
          ecran = SDL_SetVideoMode( 1000  ,  800  , 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));


          /*création des  objets de type SDL*/
          SDL_Game surface(ecran, a, b),menu1(ecran, a, b);
          menu1.setNom("surf.jpg");
          surface.setNom("vaisseau.bmp");
          surface.setTrans(255, 255, 255);

        SDL_EnableKeyRepeat(10, 10);

        while (continuer)
        {
            SDL_PollEvent(&event);
             switch(event.type)
                {
                    case SDL_QUIT:
                        continuer = 0;
                        break;

                    case SDL_KEYDOWN  :
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE:
                        continuer=0;
                        break;

                       case SDLK_UP:
                       if(!p)
                       menu1.setPos(a, b-=3);
                       else
                       surface.setPos(a, b-=3);
                       break;

                       case SDLK_DOWN:
                       if(!p)
                       menu1.setPos(a, b+=3);
                       else
                       surface.setPos(a, b+=3);
                       break;

                       case SDLK_RIGHT:
                       if(!p)
                       menu1.setPos(a+=3, b);
                       else
                       surface.setPos(a+=3, b);
                       break;

                       case SDLK_LEFT:
                       if(!p)
                       menu1.setPos(a-=3, b);
                       else
                       surface.setPos(a-=3, b);

                       break;

                       case SDLK_p:
                       p=1;
                       break;
                       case SDLK_d:
                       p=0;
                       break;
                    }
                    break;
                }
                SDL_FillRect (ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
                menu1.affiche();
                surface.affiche();
                SDL_Flip (ecran);


        }




            SDL_Quit();
            return EXIT_SUCCESS;
        }



        Le SDLG.h
        #ifndef DEF_GAME
        #define DEF_GAME

        #include "SDL.h"

        class  SDL_Game: public SDL
        {


           public:
           SDL_Game(SDL_Surface*ecran,long x=0, long y=0): SDL(ecran, x, y){}


          /*Aller*/
           void allerG();
           void allerD();
           void allerH();
           void allerB();

           void bloque();
           void unBloque();

           ~SDL_Game(){};

        };

        #endif

        (comme vous avez put le voire la classe SDL_Game hérite de SDL, et pour l'instant c'est tout ce que j'ais fais, donc toute les fonctions "void allerG();"...etc. ne sont pas encore implémenté, c'est pour ça qu'il ne me semble pas utile de vous montrer SDLG.cpp qui est pour l'instant vide).

        Donc le SDL.h (la classe de base)
        #ifndef DEF_SDL
        #define DEF_SDL

        class SDL
        {
            public:
            SDL (SDL_Surface*,long x=0, long y=0);//constructeur

            void setNom(const char *);//changer le nom
            void setPos (long,long);//changer la position
            void setTrans(long, long, long);//changer la transaparence
            void setTransA(long);// changer la transparence alpha
            void setColor(long, long, long);//changer la couleure
            void setTexte(const char*, const char*, long);
            void affiche();
            ~SDL();



            private:
            //position
            long m_x, m_y;

            //transparence
            bool m_t, m_tA;
            long m_setTransA;
            long m_setTransC[3];

           //couleur et contenue
            bool m_color;
            long m_setColor [3];
            const char *m_nom;

            //texte
             bool m_texte;
             const char*m_message;
             const char*m_police;
             long m_taille;

             //Surface
             SDL_Surface *ecran;
             SDL_Surface *m_surface;
             TTF_Font *police1;
             SDL_Rect position;
        };


        #endif




        Et le SDL.cpp
        #include <iostream>
        #include <string>
        #include <SDL/SDL.h>
        #include <SDL/SDL_Image.h>
        #include <SDL/SDL_ttf.h>

        #include "SDL.h"

        using namespace std;

        SDL::SDL (SDL_Surface*ecran1 ,long x, long y)
        {
                ecran=ecran1;
                m_nom="";
                m_x=x;
                m_y=y;
                m_t=false;
                m_tA=false;
                m_setTransA=0;
                m_setTransC[3]=0;
                m_color= false;
                m_setColor[3]=0;
                m_texte=false;
                m_surface=NULL;
                m_message=NULL;
                m_police =NULL;
                m_taille=0;
                police1=NULL;
                position.x=m_x;
                position.y=m_y;
        }

        void SDL::setNom(const char *nom)//changer le nom
        {
            SDL_FreeSurface (m_surface);
            m_color=false;
            m_texte=false;
            m_nom=nom;
            m_surface=IMG_Load(m_nom);
        }


        void SDL::setPos (long x=0,long y=0)//changer la position
        {
            m_x=x;
            m_y=y;
        }


        void SDL::setTrans(long a, long b, long c)//changer la transaparence
        {
               m_t=true;
               m_tA=false;

               m_setTransC[0]= a;
               m_setTransC[1]= b;
               m_setTransC[2]= c;

        }

        void SDL::setTransA(long a)// changer la transparence alpha
        {
            m_t=false;
            m_tA=true;

            m_setTransA=a;
        }

        void SDL::setColor(long a, long b, long c)//changer la couleur
        {
            m_color=true;

            m_setColor[0]= a;
            m_setColor[1]= b;
            m_setColor[2]= c;
        }

        void SDL::setTexte(const char* message, const char* police, long taille)
        {
            TTF_CloseFont (police1);
            m_texte=true;
            m_message=message;
            m_police=police;
            m_taille=taille;
        }

        void SDL::affiche()
        {
           if(!m_texte)
           {
            position.x=m_x;
            position.y=m_y;
            if (m_t)
            {
            SDL_SetColorKey(m_surface , SDL_SRCCOLORKEY, SDL_MapRGB( m_surface ->format, m_setTransC[0], m_setTransC[1], m_setTransC[2]));
            }
            else if (m_tA)
            {
            SDL_SetAlpha(m_surface, SDL_SRCALPHA, m_setTransA);
            }
            SDL_BlitSurface(m_surface, NULL, ecran, &position);
           }
           else
            {
            SDL_Rect position;
            SDL_Color couleur = {m_setColor[0], m_setColor[1], m_setColor[2]};
            police1 = TTF_OpenFont(m_police, m_taille);
            m_surface = TTF_RenderText_Blended(police1, m_message , couleur);
            SDL_BlitSurface(m_surface, NULL, ecran, &position);
            }
        }

         SDL::~SDL()//pour libérer la surface;
        {
          SDL_FreeSurface (m_surface);
          SDL_FreeSurface (ecran);
          if (m_texte)
          TTF_CloseFont(police1);
        }


        En déffinitive j'utilise juste la classe dérivé SDLG de SDL comme si c'était la classe SDL puisque la dérivation est publique et que pour l'instant (mais ça va venir) la classe SDLG n'apporte rien de nouveau. :) .
        ps:Pour l'exécutable, je ne vois pas trop comment vous le donner (honte à moi :p ).
        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2007 à 21:48:33

          J'ai regardé de loin ton programme et il n'y a pas de gestion de temps processeur. Donc normalement en faisant Ctrl+Alt+Suppr le temps processeur de ton prog doit être autour des 100% si tu l'exécutes -> ton processeur tourne pour rien et fait un boucan monstre. Si il n'y a vraiment pas de SDL_Delay dans ton code voilà la raison.
          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2007 à 23:08:05

            Tu peux utiliser cette fonction par exemple :
            void limitFPS(int fps)
            {
                static unsigned int last = 0;
                if(last == 0)
                    last = SDL_GetTicks();
                else
                {
                    unsigned int now = SDL_GetTicks();
                    SDL_Delay(last + (1000/fps) - now);
                    last = now;
                }
            }

            Et faire un appel limitFPS(50) dans ta boucle.
            • Partager sur Facebook
            • Partager sur Twitter

            Mon ordinateur fait un drôle de bruit (bon titre de fim lol)

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown