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

Langage Delphi Discussion :

ShowMessage qui modifie l'exécution d'une boucle


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut ShowMessage qui modifie l'exécution d'une boucle
    Bonjour

    Il m'arrive un truc incompréhensible
    Dans une boucle for... to, j'avais inséré un showmessage pour vérifier la valeur d'un paramètre
    Une fois ce contrôle devenu inutile, j'ai enlevé le showmessage (ci-dessous en commentaire)
    Voilà ce que j'observe si je mets un point d'arrêt dans l'éditeur sur la ligne en rouge (Progress:=true)...
    Si je lance l'execution, l'exe ne s'arrête que si le showmessage est activé
    Si je mets le showmessage en commentaire comme ci-dessous (en laissant bien sûr le point d'arrêt), le prog s'execute sans s'arrêter
    Je ne change strictement rien d'autre
    Un truc de ouf !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if trouve>-1
    then for lg2:=(lg1 div 3+1)*3 to 17 do
           if condition
           then begin
                         //showmessage('blabla');
                         Progress:=true;
                         for lg:=0 to 8 do
                         if (lg<>lg1-9) and (lg<>lg2-9)
                         then begin
                                  Caz[IndCaz[cl1,lg]].Cdt:=Caz[IndCaz[cl1,lg]].Cdt-[v];
                                  Caz[IndCaz[cl2,lg]].Cdt:=Caz[IndCaz[cl2,lg]].Cdt-[v];
                                end;
                   end;
    Je précise que cette boucle est imbriquée dans 2 autres
    Je vous mets pas tout le code, faudrait quand même pas que je dévoile mes astuces pour le prochain défi

    Toute piste sera la bienvenus
    Choisir, c'est renoncer...

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Je vois pas pourquoi ca marche pas dans ce cas.
    Est ce que tu as essayé de mettre ton point d'arret a la ligne du dessous ?

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 740
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 740
    Points : 13 283
    Points
    13 283
    Par défaut
    Progress n'est utilisé nulle-part ailleurs dans ton code et est ignoré par le compilateur. (Tu n'as certainement pas de point bleu sur la ligne)

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Ou, tout simplement, tu as activé des optimisations qui font que la ligne en question est intégrée à une autre ligne...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Je précise que l'exécution de mon prog ne donne globalement pas le même résultat avec le showmessage activé ou non !
    Avec le showmessage, la résolution de la grille va (presque) jusqu'au bout
    Si je mets le showmessage en commentaire, la résolution s'interrompt + tôt
    Citation Envoyé par mick605
    Est ce que tu as essayé de mettre ton point d'arret a la ligne du dessous ?
    Oui c'est pareil !
    Citation Envoyé par andnotor
    Progress n'est utilisé nulle-part ailleurs dans ton code et est ignoré par le compilateur. (Tu n'as certainement pas de point bleu sur la ligne)
    Progress est une variable globale et il y a bien un point bleu
    Citation Envoyé par Mac LAK
    Ou, tout simplement, tu as activé des optimisations qui font que la ligne en question est intégrée à une autre ligne...
    Tu pourrais préciser ?
    Choisir, c'est renoncer...

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par OutOfRange Voir le message
    Tu pourrais préciser ?
    Si tu as activé les optimisations dans ton programme (Projet -> Options -> Compiler -> Code generation -> Optimization), alors ton programme est en mode optimisé, aussi appelé "Release" dans d'autres langages.

    Et donc, une ligne n'est pas forcément à l'endroit où elle est censée être dans le code, car le compilateur peut réordonner certains appels, ou les grouper, ou que sais-je encore...

    Case à décocher pour le debug, du moins tant que tu n'es pas plus qu'à l'aise avec ce genre de trucs.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par Mac LAK
    Case à décocher pour le debug, du moins tant que tu n'es pas plus qu'à l'aise avec ce genre de trucs.
    coché ou décoché, ça ne change rien
    Et le fait que le showmessage interrompe l'exécution, y aurait rien à creuser de ce côté ?
    Choisir, c'est renoncer...

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Cela peut activer des "Application.ProcessMessages" cachés, essaie d'en ajouter un après ton "Progress:=true"...

    Vérifie également que "Progress" est utilisée, sinon, elle pourrait être supprimée par le compilateur plus ou moins sans préavis, et donc ne plus générer de ligne d'instruction.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    En fait, le code s'exécute bien, pour l'instant
    J'ai juste ajouté un showmessage + bas et ensuite je l'ai mis en commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if trouve>-1
    then for lg2:=(lg1 div 3+1)*3 to 17 do
           if condition
           then begin
                         //showmessage('blabla');
                         Progress:=true;
                         for lg:=0 to 8 do
                         if (lg<>lg1-9) and (lg<>lg2-9)
                         then begin
                                  Caz[IndCaz[cl1,lg]].Cdt:=Caz[IndCaz[cl1,lg]].Cdt-[v];
                                  //showmessage('gouzi gouzi')                                    
                                  Caz[IndCaz[cl2,lg]].Cdt:=Caz[IndCaz[cl2,lg]].Cdt-[v];
                                end;
                   end;
    Choisir, c'est renoncer...

  10. #10
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Mac LAK,

    Après avoir fait plusieurs essais, je pense que tu as raison et que l'activation ou non de l'optimisation est à l'origine du comportement observé :
    - optimisation cochée + showmessage => le code s'exécute
    - je désactive le showmessage => le code ne s'exécute plus
    - je décoche optimisation => le code ne s'exécute toujours pas
    - je réactive showmessage => le code s'exécute
    - je désactive showmessage => le code s'exécute toujours
    - je recoche optimisation => le code s'exécute toujours...
    mais faut plus toucher au showmessage

    Bon, c'est pas comme ça que je remporterai le défi

    Merci pour aide, ainsi qu'à Andnotor et mick605
    Choisir, c'est renoncer...

  11. #11
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Le comportement "étrange" est certainement dû à une recompilation partielle de ton projet après les changements d'options.

    Conseil : n'active pas les optimisations tant que tu bosses dessus. A la fin du projet, une fois testé / validé décemment, active l'option, reconstruit le projet, et re-teste (on ne sait jamais...).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  12. #12
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Vérifie également que "Progress" est utilisée, sinon, elle pourrait être supprimée par le compilateur plus ou moins sans préavis, et donc ne plus générer de ligne d'instruction.
    +1,à propos sa sert à quoi dans ton boucle ce "progres"??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

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

Discussions similaires

  1. Programme qui ne repond plus durant une boucle
    Par Gorjeck dans le forum Windows Forms
    Réponses: 5
    Dernier message: 26/05/2008, 11h48
  2. Réponses: 1
    Dernier message: 06/05/2008, 13h32
  3. Afficher un waitbar pendant l'exécution d'une boucle while
    Par LMU2S dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/03/2008, 19h22
  4. [Débutant] Modifier la limite d'une boucle For dynamiquement
    Par seiryujay dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/12/2006, 18h45
  5. [Système] problème d'exécution d'une boucle
    Par WalidNat dans le forum Langage
    Réponses: 6
    Dernier message: 02/04/2006, 00h55

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