Créer une interruption de programme.

Résolu
Signaler
Messages postés
37
Date d'inscription
mercredi 11 janvier 2006
Statut
Membre
Dernière intervention
19 juin 2008
-
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
-
   Bonjour tous le monde!!!

Encore un petit probléme!!!!
Enfin voila dans un programme, j'ai créer une fonction Main (Private sub Main( )). Cette fonction est lancé au chargement de la feuille, et réalise une boucle en continue pour lire un port série. Le probleme, c'est que j'ai fait un bouton pour quitter mais quand je veux quitter, il continue tjr la fonction main...La feuille se recharge....
J'aurais voulu creer une interruption de programme qui me dirait que quand j'ai cliqué sur le bouton retour, la fonction s'arrete...
En espérant avoir était assé clair pour que quelqu'un me reponde!!! Si c'est pas le cas n'exitait pas a me dire que vs avez rien comprit!!!!

14 réponses

Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
eheh tu devrais te relire avant de poster.. perso ça 'm'exite' pas trop de te dire que j''hesite' sur ta boucle un peu longue dans la fonction main, mais à mon avis, tu devrais te renseigner au sujet des 'timer'.

En gros l'idee c'est que quand tu cliques sur le bouton, tu places un boolean à true, et qu'au debut de la boucle dans ta fonction main, tu lances le timer qui checkerait l'etat du booléen (toutes les 'x' millisecondes)

Je sais pas si je suis clair, ça peut être une solution.. mais à mes (petits..) yeux le vrai problème est de savoir si tu peux vraiment cliquer sur ton bouton pendant le deroulement de ta boucle.. ça ça me parait pas evident, mets un point d'arret derriere le bouton et regarde, je suis pas sur que ça le fasse vraiment
.Maytheforcebewithyou.Maxime.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
méthode simple:

remaplcer ta boucle par un Timer, qu'il te suffira de désactiver dans ton Form_QueryUnload
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Salut,

Pourrais-tu nous donner le code de ta boucle (du moins le principe général)?

Jimy
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Salut Renfield,

Pour ma culture personnelle:

Comment estimerais-tu l'interval du timer et si la boucle est lancé dans le timer, le passage à timer.enabled=false ne sera-t-il pris en compte qu'a la condition de sortir momentanément de la boucle? Ne faut-il pas prévoir un DoEvents pour que la demande d'arrêt soit pris en compte?

Jimy
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
pas une boucle dans le Timer, non, mais un timer a la place de...

pour la lecture du click et faire joujou avec un Boolean, faut que la boucle soit munie d'un DoEvents

pour l'interval, on peut mettre 1. c'est utopique, disons que ca lira régulièrement, de manière relativement rapprochée.
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Perso, je préfère:

Do
'***********
DoEvents
loop while Fin=False

J'ai été confronté à ce PB, sur une aplli de COM Modbus, et c'est la solution que j'ai retenu...

Mais l'idée de Renfield peut-être efficace, faut tester!
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
A y est; j'ai placer toues mes reqêtes Lecture/Ecriture ModBus dans un timer comme Renfield le préconisait et cela fonctionne très bien..
Les deux solutions fonctionnent donc, c'est au choix...

Jimy

Pensez: Réponse acceptée
'**********************************************
Messages postés
37
Date d'inscription
mercredi 11 janvier 2006
Statut
Membre
Dernière intervention
19 juin 2008

Merci pour vos réponse...Et désolé pour les fautes de frappes...
en fait le vrai probléme que j'avais c'est que mon Main etait lancé dans la procédure Form_Load. donc quand je quittais le main et bin la feuille se rechargée....
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
faut rien faire de lourd, dans un Form_Load, ca ralentit l'affichage de la Form, c'est vilain
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Salut Renfield,

Que préconises-tu pour les traitements un peu lourd, mais qui doivent être fait avant ou à l'ouverture d'une form...tout en évitant, comme tu viens de le dire, le ralentissement de l'ouverture de la form?

Jimy

Pensez: Réponse acceptée
'**********************************************
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
astuce, puisque cela parait détourné... mais j'utilises générallement un Timer.

Avec un Interval très petit (200, histoire de mettre une valeur)

et dans le code:

Private Sub CcTimDeferLoad_Timer()
CcTimDeferLoad.Enabled = False
{....}
End Sub

c'est sans commune mesure... ca ira bien plus vite ansi : la form étant chargée et affichée.
reste a faire gaffe au code que l'on met.
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Ok, j'ai bien compris le principe, mais petit détail, dans:

Private Sub CcTimDeferLoad_Timer()
    CcTimDeferLoad.Enabled = False
    {....}
End Sub

Tu dévalide le timer AVANT l'exécution du reste de son contenu, avant ou après n'a pas d'incidence?
Jimy

Pensez: Réponse acceptée
'**********************************************
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
non (pas a ma connaissance), je prefere le faire avant... comme ça, c'est fait, ca se confond plus avec le reste
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Dans ce sens, et pour en revenir à l'histoire de la boucle du début du post, on est certain que l'execution du contenu de la boucle sera terminée, mais pas renouvelée...

Ok pour moi, norber59480, je te laisse le soin du 'Réponse acceptée' (si c'est bon pour toi biensure...)

Merci Renfield

Jimy

Pensez: Réponse acceptée
'**********************************************