Meilleur auteur de réponses
Interrompre une boucle de calcul

Question
-
Bonjour,
Je souhaite donner à l'utilisateur de mon logiciel de calcul la possibilité d'interrompre une boucle de calcul.
Cette boucle est constituée par un enchaînement Do... Loop Until... (Il y a une boucle principale et plusieurs boucles intermédiaires).
Les boucles portent sur des calculs par itération. On assigne à une des variables une valeur x, et on calcule la fonction y=f(x). Si la valeur obtenue n'est pas satisfaisante (ne répond pas à un critère de comparaison) on incrémente la valeur de x d'une petite valeur (le pas d'itération) et on recommence le calcul. Or, dans certains cas, l'itération diverge, c'est à dire que la valeur y s'éloigne de la valeur souhaitée au lieu de s'en rapprocher. Dans d'autres cas (c'est celui pour lequel j'ai besoin de votre assistance) le calcul se prolonge parce que la valeur du pas est trop petite. A titre d'information, il est courant dans mon logiciel que certaines itérations atteignent plusieurs centaines de millions de parcours de la boucle de calcul pour finalement aboutir au résultat souhaité.
En fait, je donne les explications ci-dessus uniquement dans un but informatif. Elles ne sont pas nécessaires dans la résolution de mon problème. Ce que je cherche, c'est un moyen simple (un clic sur un bouton par exemple) pour que l'utilisateur interrompe la boucle de calcul. La solution avec VB6 était de mettre un drapeau (oui / non) par le bouton d'arrêt, et de forcer le système à examiner la position du drapeau au moyen de la commande DoEvents. Celle-ci n'existe plus sur vb.net.
Quelqu'un pourrait-il m'aider ?
Pierre Allemand
Réponses
-
et de forcer le système à examiner la position du drapeau au moyen de la commande DoEvents. Celle-ci n'existe plus sur vb.net.
Quelqu'un pourrait-il m'aider ?
Pierre Allemand
Bonjour,
mais si, ca existe encore:
Application.DoEvents
Regards, Nico
- Modifié Nico Boey vendredi 11 mai 2012 14:09
- Marqué comme réponse Pierre Allemand vendredi 11 mai 2012 14:59
-
Bonjour,
Cela reste un peu périlleux comme indiqué par la rubrique "Attention" de la documentation : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.application.doevents.aspx
Une autre façon de faire serait d'utiliser un BackgroundWorker qui est spécialement conçu pour faire des traitements d'arrière plan en pouvant signaler les progrès du calcul et en supportant une annulation éventuelle des calculs (mais il faut effectivement se familiariser avec)...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Proposé comme réponse Gilles TOURREAUModerator samedi 12 mai 2012 08:15
- Marqué comme réponse Gilles TOURREAUModerator samedi 12 mai 2012 08:16
-
- Proposé comme réponse EhJoe samedi 12 mai 2012 00:17
- Marqué comme réponse Gilles TOURREAUModerator samedi 12 mai 2012 08:16
Toutes les réponses
-
Salut,
tu peux toujours mettre le flag
mais seulement tu dois l'ajouter a ta condition exemple:
dim flag as boolean = false
do
'ici le code a executer
loop until (ta condition) or flag=true
et dans la procedure click de ton bouton arret tu fais:
flag=true
la FOI déplace les montagnes et bien DOTNET les effaces complétement.
- Marqué comme réponse Pierre Allemand vendredi 11 mai 2012 15:03
- Non marqué comme réponse Pierre Allemand vendredi 11 mai 2012 15:03
-
et de forcer le système à examiner la position du drapeau au moyen de la commande DoEvents. Celle-ci n'existe plus sur vb.net.
Quelqu'un pourrait-il m'aider ?
Pierre Allemand
Bonjour,
mais si, ca existe encore:
Application.DoEvents
Regards, Nico
- Modifié Nico Boey vendredi 11 mai 2012 14:09
- Marqué comme réponse Pierre Allemand vendredi 11 mai 2012 14:59
-
-
-
Bonjour,
Cela reste un peu périlleux comme indiqué par la rubrique "Attention" de la documentation : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.application.doevents.aspx
Une autre façon de faire serait d'utiliser un BackgroundWorker qui est spécialement conçu pour faire des traitements d'arrière plan en pouvant signaler les progrès du calcul et en supportant une annulation éventuelle des calculs (mais il faut effectivement se familiariser avec)...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Proposé comme réponse Gilles TOURREAUModerator samedi 12 mai 2012 08:15
- Marqué comme réponse Gilles TOURREAUModerator samedi 12 mai 2012 08:16
-
J'avais effectivement lu, pour résoudre mon problème général de calcul, le chapitre intitulé "vue d'ensemble de la programmation asynchrone". N'étant pas familier du tout avec les BeginNomOpération et EndNomOpération qui ne ressemblent pas au langage vb classique, j'ai laissé provisoirement de coté. mais, je vais y revenir, car selon les cas, mes calculs peuvent avoir des comportements très différents.
Pierre Allemand
-
- Proposé comme réponse EhJoe samedi 12 mai 2012 00:17
- Marqué comme réponse Gilles TOURREAUModerator samedi 12 mai 2012 08:16