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

Turbo Pascal Discussion :

Ralentissement d'une boucle à cause de keypressed [Turbo Pascal]


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 190
    Par défaut Ralentissement d'une boucle à cause de keypressed
    Bonjour, bonsoir,
    je n'ai jamais pris le temps de me pencher sur un problème de ralentissement dans certains programmes jusqu'à aujourd'hui. Je viens de faire un petit test et j'obtiens un ralentissement de la boucle for avec cette configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     for compt:=1 to (10-Vitesse_du_prog) do
     begin
         if keypressed then
         begin
            .....
         end;
         delay(Tempo_Clavier);
     end;
    Je n'ai pas mesuré mais avec un Tempo_Clavier de 20 ms par ex, la boucle se fait mettons 100 fois toutes les 20ms et devient 3 ou 4 fois plus lente ensuite... ... jusqu'à ce qu'une touche soit pressée.

    C'est comme si après 100 appels à keypressed sans touche dans le tampon du clavier, keypressed disait "Bon y'en a marre, t'arrête pas de me faire aller voir le tampon alors qu'il est toujours vide, maintenant je vais boire un café à chaque fois avant d'y aller".

    Quelqu'un a déjà vu ça ?
    Ou a une explication (logique) ?
    Ça se guérit ?

    Merci d'avance
    Gabi

  2. #2
    Membre averti

    Inscrit en
    Janvier 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2009
    Messages : 37
    Par défaut
    Je me sers pas mal de keypressed mais je n'ai jamais noté cet effet. En même temps, il est toujours dans des boucles plutôt du style
    repeat...until keypressed (écrit différemment, mais l'idée est toujours celle-ci).

    En revanche, pour delay, je sais qu'il est particulièrement instable, fonction de la puissance de la puce, mais aussi de sa bonne volonté. Ainsi, j'ai du créer pour les messages ou même pour la souri deux constantes delai_souris et delai_message, qui permettent dans les options à l'utilisateur de régler ce paramètre afin que delay soit confortable pour lui.

    Je note quand même qu'il arrive que le programme ralentisse à l'excès (genre multipliant par deux ou trois la constante delai_message), ou totalement à l'inverse, ne tient pas compte du tout de cette constante, mettant des affichages avec des "delay" proches de 0.

    Question complémentaire donc : est-ce keypressed qui dérape ou delay ? pour ma part, je réponds "delay", pas par connaissance, mais par empirisme.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 190
    Par défaut
    J'ai utilisé cette structure pour permettre à la variable "Vitesse_du_prog" de gérer la vitesse générale du jeu (c'est pour un tetris). Y'a peut être mieux, avis aux amateurs.

    Histoire de compléter les expériences, il m'est arrivé aussi que le programme s'emballe (comme une delay=0 en effet), mais pas depuis quelques temps. Je me souviens que quand ça arrivait, en revenant sous l'EDI, le curseur du clavier bougeait aussi très vite et je pouvais faire défiler les pages de code à une vitesse folle (j'ai un tp7 instable ).

    Un début de solution pour le keypressed serait d'ajouter "artificiellement" une touche dans le tampon clavier si aucune touche n'est pressée pendant un certain temps. Mais même si c'est possible, ça ne me plaît pas trop, c'est trop du bidouillage.

    Et dire que j'étais juste parti pour ajouter un menu au jeu et il a fallu que je me rende compte de ce pb . Et le plus agaçant, c'est qu'il y aurait une autre solution, c'est d'utiliser Sclavier (unité de Haypo). Mais zut, moi je voulais changer le menu, C'EST TOUT !

    Alors j'attends encore 3-4 jours et si rien ne vient me consoler, je vais chasser les mouches au bazooka.

    Sur ce, passez quand même une bonne journée

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 052
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Pour pouvoir reproduire le problème, pourrais-tu donner plus de précisions :
    • Sur quel système exécutes-tu ton programme ?
    • Eventuellement, sur quel émulateur ?
    • S'il s'agit d'une console Windows, est-ce en plein écran ou en mode fenêtré ?
    • L'exécutes-tu depuis l'interface de TP ou bien indépendamment ?

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 190
    Par défaut
    Hello,

    je suis sur XP et j'exécute TP7 en mode plein écran. Mais je pense que ca revient au même lors de l'exécution du programme, non? Puisqu'il se met en plein écran. Je lance toujours le prog depuis l'EDI (Ctrl + F9).
    Sous windows, dans les propriétés du raccourci de TP, j'ai coché la compatibilité avec win 95, mais sans résultat.

    Ah Ah Ah, en lançant directement l'exécutable, le problème n'apparaît plus.... Bon, pt'et ben que je vais en rester là alors.
    Mais ça peut venir de quoi? Au moins par curiosité, j'aimerais le savoir.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/06/2014, 15h42
  2. problème ralentissement avec une boucle FOR
    Par calra dans le forum Scilab
    Réponses: 8
    Dernier message: 24/09/2010, 09h32
  3. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  4. Erreur causée par une boucle ?
    Par lucckyly2 dans le forum Langage
    Réponses: 4
    Dernier message: 01/07/2009, 16h53
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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