drnicholas001
Messages postés37Date d'inscriptionvendredi 10 septembre 2004StatutMembreDernière intervention21 avril 2007
-
8 mai 2006 à 04:47
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 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?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 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 !