Gros problème avec for et DoEvents

Résolu
cs_didine13 Messages postés 96 Date d'inscription mardi 18 août 2009 Statut Membre Dernière intervention 14 août 2013 - 21 juil. 2010 à 13:34
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 - 21 juil. 2010 à 16:05
Bonjour,

Je voulais savoir s’il existe un autre moyen de remplacer le for
For i = 0 to 25000


Avant que le code ce d’éclanche je lance une fenêtre s’ouvre "VEUILLEZ PATIENTEZ..." cette fenêtre fige devient blanche et des fois le programme plante.
Après quelque recherche sur http://www.vbfrance.com j'ai découvert qu'il faut ajouter un DoEvents,
Cela est vrais que le programme est super stable je peux même bouger ma fenêtre "VEUILLEZ PATIENTEZ...", mais le problème est que au lieu de 11 secondes pour que le programme fini de s'exécuter il mais 3 minute 35 (si il ne ce plante pas lol).

Avez une solution pour moi SVP

Merci d'avance

5 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 juil. 2010 à 15:35
tout un tas d'events systeme + les actions de l'utilisateur sur ton interface, etc.

vont générer des messages a destination de ton application, afin que celle-ci réagisse, (VB6 s'en sert pour incoquer les evenements de tes controles)

un DoEvents permet de forcer ton programme à gerer ces messages.
du coup ca induit quelques traitements supplémentaires.

d'un autre coté, si ces messages patientent trop longtemps dans la file des messages (longue boucle sans DoEvents), windows s'apercoit que ton programme ne les traite pas, il la marque comme ne répondant pas. (la fenetre devient blanche, etc.)

du coup, il faut faire les choses raisonnablement :
- mettre la fenetre en inactive, pour éviter que des clicks declenchent des evenements parasites
- mettre des Doevents dans la boucle afin de traiter les massage

mais pas un DoEvents a chaque tour de boucle, non...
soyons fins :

For i = 0 to 25000
    If  (i and &hFF)= 0 Then
        DoEvents
    End If
    ...
Next


Ainsi, un Doevents sera invoqué toutes les 256 iterations...


Concernant ta boucle, laisse une boucle For

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 7 août 2020
21 juil. 2010 à 13:59
Bonjour,

Tu veux faire patientez l'utilisateur pour quoi?

Si tu veux juste le faire poiroter pour le plaisir, utilise un timer.

Sinon, c'est que tu as du traitement de code à faire et le temps d'exécution ne peux pas être modifié, cela dépend des capacités de la machine. A toi de faire le code le plus optimisé possible pour réduire le temps d'exécution du code


Bonne Prog
0
cs_didine13 Messages postés 96 Date d'inscription mardi 18 août 2009 Statut Membre Dernière intervention 14 août 2013
21 juil. 2010 à 14:06
Bonjour,

Comment ca pour quoi ?
Ben c'est pour attendre la fin de l'exécution comme dans n'importe quel autre programme.
Faire poiroter pour le plaisir: Non
Utilise un timer pour : pour quoi faire

J'ai téléchargé quelque exemple sur le site et j'ai remarqué que le Do While et plus utiliser que le for.

Mais je ne sais pas si c'est possible de convertir mon for -> Do While.
Je suis vraiment débutant dans les boucles.
Merci
0
cs_didine13 Messages postés 96 Date d'inscription mardi 18 août 2009 Statut Membre Dernière intervention 14 août 2013
21 juil. 2010 à 15:41
Bonjour,

Je viens de tester et je suis très satisfaite.

1000 Merci à toi Renfield

Cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
21 juil. 2010 à 16:05
tu pouvais aussi utiliser refresh()
0
Rejoignez-nous