Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un doute sur la gestion du temps du cour de mateo

    8 mai 2006 à 15:57:31

    Salut à tous.

    Je lu les news et le cours de C quand j'ai du temps juste pour la logique, j'ai pas pu tester mais je doute sur ce code :

    tempsActuel = SDL_GetTicks();
    if (tempsActuel - tempsPrecedent > 30)
    {
        positionZozor.x++;
        tempsPrecedent = tempsActuel;
    }
    else /* Si ça fait moins de 30ms depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */
    {
        SDL_Delay(30 - (tempsActuel - tempsPrecedent));
    }



    Voici le code C du cour de Matéo pour faire patienter le processeur de 30 ms.

    En francais ca fait : SI ca fait déjà 30 ms depuis le dernier déplacement de zozor, ALORS on déplace zozor SINON on attend [le temps qui reste pour faire 30 ms]. Mais à ce moment là ca feras plus que 30 ms vu que le procésseur de redonnera pas la main au programme avant 30 ms + le temps que l'OS repasse par le programme (temps variable).

    Ducoup, le déplacement ne pouras pas être fluide et le temps sera plus près de 40 ms que de 30 ms vu qu'il faut rajouter environ 10 ms ~ .

    Y'a un truc qui m'échape là ! o_O

    Merci de me rep. A bientôt !
    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2006 à 16:43:49

      Salut
      J'ai eu la meme reflexion que toi en lisant ce bout de code :D .

      Effectivement si on considere que le programme met 10ms a executé les insctuction, quand il arrive a la condition il ira au else,puis patientera 20ms et refera les insctructions , ce qui durera 10ms de plus.
      Je pense qu il faut rajouter un
      positionZozor.x++;
          tempsPrecedent = tempsActuel;

      dans le else apres le delai d'attente et la ca marchera normalement.

      Corriger moi si j'ai pas compris :D
      • Partager sur Facebook
      • Partager sur Twitter
        8 mai 2006 à 17:24:14

        C'est plus ou moins vrai en effet. Chez moi ça met à peine plus de 30ms (faut pas tjs 10ms). Chuis pas à 3-4ms près ;)
        • Partager sur Facebook
        • Partager sur Twitter

        If you'd like to join us, read "How do we work at OpenClassrooms"! :)

          8 mai 2006 à 18:21:59

          Dans ce cas, si on met

          SDL_Delay(30 - (tempsActuel - tempsPrecedent));

          ... On est certain qu'il ce sera écoulé au moin 30 ms donc c'est pas la pène de faire de test vu que l'on sais que :

          A la première boucle, c'est FAUX
          ensuite on attend 30 ms
          A la 2ème boucle, c'est VRAI
          et on continue

          Donc il suffi de ne mettre que "on attend 30 ms" et on continue...

          Sans faire dutout de test.

          Ma question : On fait ca pour rien ou pour une raison qui m'échappe encore ?
          • Partager sur Facebook
          • Partager sur Twitter
            8 mai 2006 à 19:41:53

            Citation : matéo

            C'est plus ou moins vrai en effet. Chez moi ça met à peine plus de 30ms (faut pas tjs 10ms). Chuis pas à 3-4ms près ;)



            Ouais mais si les insctructions avant le test mettent environ 20ms , tu passe tout de suite a 50ms au lieu de 30ms , la y a un probleme pour la fluidité non?
            • Partager sur Facebook
            • Partager sur Twitter
              8 mai 2006 à 20:50:47

              les temps des "insctructions avant" est négligable à coté du temps que l'OS met à redonner la main au programme.

              Enfait, avant ce nouveau chapitre, j'avais éssayé de faire bouger zozor et j'ai dû faire des boucle infini vides avec un compteur et j'ai pu voir que le nombre d'instruction à la secondes est vraiment... GEANT !!

              10 ms c'est pas rien par rapport au temps que met le procésseur à éxecuter une instruction du genre tempsPrecedent = tempsActuel; ou un test.


              A mon avi, pour la fluidité il faut passer 20 ms (avec SDL_Delay) et rester attentif sur les 10 dernières ms avec une boucle et SDL_GetTicks().

              A voir... et tester...
              • Partager sur Facebook
              • Partager sur Twitter

              Un doute sur la gestion du temps du cour de mateo

              × 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