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

VB 6 et antérieur Discussion :

[VB6]Interompre une procédure recursive de l'exterieur.


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [VB6]Interompre une procédure recursive de l'exterieur.
    Bonjour à tous.

    j'a en ce moment un programme qui utilise une (trés) grosse procédure récursive (assez peux de récursivité mais chaques récursivité contient une procédure d'environ 115 000 instructions (en débouclant)).
    la procédure est assez rapide(5-10 s) dans la plupart de cas (car il y a des facteurs qui racourcissent les prcédures). Cependant, il arrive que la procédure soit extrèmement longue (5 min-beaucoup (pas allé jusqu'au bout )). j'aimerais que l'utilisateur puisse interompre la procédure. (petit problème, lorsqu'elle tourne, les boutons et les timers ne tournent pas.)

    Ceci est mon premier problème.

    mon second problème, est qu'au bout d'un moment, windows déclare le programme comme "ne répond pas" et cesse de lui alouer toutes le ressources (ce qui ralentit encore plus la fonction et bloque encore plus le programme).

    merci

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    rajoute un DoEvents ... dans ta procédure.....

  3. #3
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    heu... je n'ais pas l'habitude d'utiliser cette procédure.

    tu peux préciser son utilisation et ses caractéristiques ainsi que ses contraintes?


    merci

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Tu ajoutes un controle à l'exécution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public autorisationValue as boolean
     
    sub maProcRecursive
        if not autisationValue then
            'le code
        endif
    end sub
    par défaut autorisationValue = false -
    il suffit de le mettre à true pour que la récursivité ne s'effectue plus


    Le doevents permet de rendre le controle à l'environnement

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    merci darkvader.
    cependant, ce n'est pas vraiment la procédure de sortie de la boucle qui m'embete. (encore qu'avec ta procédure, le système peut mettre plus de dix secondes à sortir de la récursivité (ce n'est pas une simple récursivité))

    en fait, si j'ai bien compris, le do events permet de controler si les évnements de type treads n'ont pas reçu d'instruction c'est cela?. dans ce cas, je dois donc le tester régulièrement. je me demande de combien cela peut-il ralentir une procédure?

    merci

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Aide en ligne
    DoEvents, fonction


    Arrête momentanément l'exécution afin que le système d'exploitation puisse traiter d'autres événements.
    en rendant la main au systéme d'exploitation ... ainsi si tu écris, dans une boite de dialogue avec un chexbox et un command button :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CommandButton1_Click()
    While CheckBox1.Value = False
    DoEvents
    Wend
    End Sub
    tu as une boucle qui se termine grâce à une action sur le chechBox1...et cela fonctionne .. cependant si tu supprime le DoEvents ... tu n'as plus la possibilité d'actionner le CheckBox....


  7. #7
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    merci, mais il y as une petite chose que je n'ai pas comprise.

    doi-je placer le dovents dans ma recursivité où dans mes controle.
    si c'est dans ma récursivité, combien de temps s'arrette-elle?


    sinon, quelqu'un sait comment gérer les ressuorces systèmes? (cf le commentaire de tête)


    merci à tous

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    oui il faut le placer dans ta procédure récursive....

    pour le temps que ça dure ...? c'est rapide...


    Citation Envoyé par Suite de l'aide en ligne
    DoEvents passe la main au système d'exploitation jusqu'à ce que ce dernier ait terminé de traiter les événements de sa file d'attente et que tous les codes de la file d'attente SendKeys aient été transmis.
    ..

  9. #9
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Merci

    une dernière question, peut-on localiser le doevents juste sur une form ou il le fait autaumatiquement sur toute l'apli?


    enfin, vu qu'il n'y as pas l'air d'y avoir des parametres d'appels...

    au fait, si tu à une idée pour la mémoire...


    merci

  10. #10
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    - Non on ne peu pas localiser le DoEvents... il laisse du temps au systéme pour faire ce qu'il a à faire ... partour...

    - pour la mémoire, si tu parle de
    mon second problème, est qu'au bout d'un moment, windows déclare le programme comme "ne répond pas" et cesse de lui alouer toutes le ressources (ce qui ralentit encore plus la fonction et bloque encore plus le programme).
    si tu place des DoEvents.. Windows aura sans doute moins tendance à déclarer ton programme comme ne répond Pas...

    si tu essai ma boule While fait rien à par bouffer des ressources un peu plus haut et tu compare avec ou sans DoEvents .. tu comprendra mieux l'utilité de DoEvents...

  11. #11
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    en effet
    en plus, je l'ai mis que toutes les 20 000 instructions comme ça, il pompe vraiment pas grand chose.

    merci beaucoup pour tout ceci.

    bon he bien je viens de m'enrichir de nouvelles connaissances.

    salut

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

Discussions similaires

  1. [VB6] problème a l'appel d'une procédure
    Par trigone dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/04/2008, 17h37
  2. [VB6] Ouverture de Forms Conditionelle dans une procédure
    Par paltron dans le forum VB 6 et antérieur
    Réponses: 25
    Dernier message: 14/02/2006, 10h14
  3. [VB6]Passer une variable à une procédure évennementielle
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/12/2005, 19h19
  4. [VB6] Durée d'exécution d'une procédure
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/10/2005, 14h51
  5. problème avec une procédure recursive
    Par vbcasimir dans le forum SQL
    Réponses: 1
    Dernier message: 10/06/2005, 16h38

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