Une boucle qui ne ferais pas geler une application

Résolu
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007 - 8 mai 2006 à 04:47
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 - 8 mai 2006 à 21:35
Salut, pour une programme j'ai besoin de faire une boucle qui fait beaucoup de calcul (presque qu'infini). Mais quand je fais du code dans une boucle et bien le programme "gel" jusquà ce qu'il est fini ses calculs.

J'aimerais faire une boucle qui pourrait afficher les résultats en temps réel et qui ne ferait pas geler le programme quand elle roule. Un peut comme si la boucle était dans un timer, mais en plus performant.

J'ai essayé la fonction sleep et sa n'a rien donné. Avez vous des idées?

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 mai 2006 à 05:03
Salut
C'est le rôle de DoEvents : Laisser la main au système pour gérer ses entrées/sorties.
Si tu as beaucoup d'itérations, pas la peine de mettre un DoEvents à chaque boucle, sinon, ça risque de trop ralentir la boucle.
Voilà une astuce :
Dans ta boucle (où "r" est ton index For-Next), insères ce code :
If (r / 100) = Int(r / 100) Then DoEvents
Il ne fera un DoEvents que tous les 100 passages

Si c'est une boucle Do-While, il faut que tu installes un petit compteur de boucle pour pouvoir utiliser cette technique

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
3
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
8 mai 2006 à 19:22
Je pense que tu dois utiliser un thread ca sera encore plus fluide ! Si tu ne sais pas te servir de thread dis moi je te montrerai la marche à suivre.

Redman
3
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007
8 mai 2006 à 21:10
Salut, merci de vos 2 commentaires. Je vais essayer les 2. et effectivement je sais pas cest quoi un thread. je vais faire une petite recherche!
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
8 mai 2006 à 21:35
Un thread c'est un "composant" qui permet de libérer la mémoire instantanée pour faire une action précise.

Comment ça fonctionne : La mémoire du programme va être prioritairement alloué au thread qui est attribué à une procédure ou fonction, au final la procédure ou la fonction sera plus rapide et ne fera pas "ramer/geler" le programme.

Utilisation d'un thread :

Déclara à l'en-tête de ton formulaire ou module contenant la procédure qui gèle le programme, et déclare ceci : Public myThread as New Threading.Thread(AddressOf maProcédure).

et dans l'évènement qui doit déclencher la procédure remplace par ceci : myThread.Start.

Voilà !

Si jamais du démarrage à la fermeture du programme tu dois utiliser plusieurs fois la procédure fais moi signe car il y aura du code à ajouter !

Redman
0
Rejoignez-nous