Créer une interruption de programme.

Résolu
cs_norber59480 Messages postés 37 Date d'inscription mercredi 11 janvier 2006 Statut Membre Dernière intervention 19 juin 2008 - 30 avril 2008 à 11:33
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 - 5 mai 2008 à 16:29
   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

TrafMaxime Messages postés 288 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 26 janvier 2012 1
30 avril 2008 à 11:49
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.
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 avril 2008 à 11:43
méthode simple:

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

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

Jimy
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
30 avril 2008 à 11:52
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
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 avril 2008 à 11:56
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.
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
30 avril 2008 à 12:32
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!
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
1 mai 2008 à 12:36
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
'**********************************************
0
cs_norber59480 Messages postés 37 Date d'inscription mercredi 11 janvier 2006 Statut Membre Dernière intervention 19 juin 2008
2 mai 2008 à 10:55
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....
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
5 mai 2008 à 10:39
faut rien faire de lourd, dans un Form_Load, ca ralentit l'affichage de la Form, c'est vilain
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
5 mai 2008 à 15:36
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
'**********************************************
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
5 mai 2008 à 15:44
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.
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
5 mai 2008 à 16:13
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
'**********************************************
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
5 mai 2008 à 16:16
non (pas a ma connaissance), je prefere le faire avant... comme ça, c'est fait, ca se confond plus avec le reste
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
5 mai 2008 à 16:29
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
'**********************************************
0