philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 2013
-
13 juin 2006 à 17:36
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007
-
15 juin 2006 à 20:15
Bonjour tout le monde,
Langage utilisé VB6.0
Je me remet tout doucement à la programmation ...
Je cherche à stoper l'exécution d'une procédure si par exemple, une variable système ARRET passe à 1.
Private Sub Essai()
...
...
...
End Sub
J'ai pensé utilisé un TIMER pour scruter si la variable de type entier ARRET passe à 1,
Private Sub Timer1_Timer()
If ARRET = 1 Then
?????? 'Essai.Enabled = False dans l'idée ... End If
End Sub
Mais comment sortir de la procedure à la manière un peu d'un Exit Sub mais hors procédure????
Pour une procédure il n'existe pas d'évenement, on peut simplement la démarrer d'une autre procédure à ce que je sais.
Donc comment stopper cette procédure? Faut-il utiliser Do Events quelquepart?
En espérant avoir été assez clair et en vous remerciant par avance !
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 13 juin 2006 à 20:41
Rhhaaaa Lovely ! j'adore ta réponse DARKSIDIOUS (le renvoi sur la question posée) ;-)
Une manière de dire que c'est insoluble ?
Je penche pour une question mal posée (en tous cas très imprécise) !
Moi non plus je ne vois pas comment sortir d'une procédure "hors procédure".
cs_Amazing
Messages postés35Date d'inscriptionlundi 23 juin 2003StatutMembreDernière intervention17 avril 20102 13 juin 2006 à 22:05
tu as quelque chose qui tourne en boucle dan ta procedure pour vouloir l'arreter en plein milieu?
si c'est le cas peut-etre que 'if Arret=1 then exit sub' ecrit dans dans ta procedure t'aidera
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 14 juin 2006 à 11:35
Bonjour à tous,
Merci pour ta réponse DARKSIDIOU ...
Je m'excuse si je me suis mal expliqué, je vous la refait !
J'utilise dans une procédure (solartron) beaucoup de commandes pour piloter en direct un appareil de mesure via une liaison GPIB. La procédure est assez conséquente, elle contient beaucoup d'ordres de commande donc beaucoup de lignes.
Exemple :
Private Sub solartron()
CWGPIB1.Configure 'configure le multimetre
CWGPIB1.Write "OP2,1" 'travaille avec le GPIB
CWGPIB1.Write "TT3" 'lance un reset du solartron
...
...
End Sub
J'aimerais, pour des raisons de sécurité de l'appareil que si l'opérateur appui sur un bouton de l'application (CommandButton) et que la routine est en train d'éxécuter les lignes de cette procédure (donc qui commande l'appareil), que je puisse sortir de la procédure pour arrêter d'envoyer des commandes à l'appareil de mesure. Un peu à la manière d'un arrêt d'urgence mais en local, je n'arrête pas mon programme général mais je sors seulement de la procédure.
Comme le propose jrivet, je pensais utiliser dans ma procédure :
If GlobalFlag Then ExitSub
Mais cette méthode, si je ne me trompe pas, suposerais de mettre cette ligne de vérification aprés chaque ligne de commande de la procédure, non? Afin d'être sûr de pouvoir quitter la procédure et de ne pas exécuter une ligne de commande aprés avoir cliké sur le bouton d'arrêt ...
Du genre :
Ligne de code 1
If GlobalFlag Then ExitSub
Ligne de code 2
If GlobalFlag Then ExitSub
Ligne de code 3
If GlobalFlag Then ExitSub
...
C'est pourquoi je voulais au départ utilisé un Timer pour ne pas être obligé de répéter cette ligne de code partout dans la procédure, ca devient vite ingérable et pas très propre.
Je connais le ExitSub pour quitter la procédure si l'on est dedans, mais je voulais simplement savoir si il est possible d'arrêter l'exécution de la procédure à partir d'un événement sur un bouton par exemple.
En espérant avoir été assez clair cette fois-ci. Mais je cherche peut être à faire quelquechose d'impossible ...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 14 juin 2006 à 15:54
Bah c'est justement ce qu'on disait dans l'autre post : je ne vois pas comment faire autrement qu'un test à chaque ligne, c'est très lourd et ce rend le code moins clair, mais je pense que c'est la seule solution malheureusement !
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 14 juin 2006 à 17:06
arf, oui exact, zut je me suis bien planté pour le coup !
Donc le lien que je voulais te mettre, c'était le post de Dolphin Boy qui avait la même question posée quelques minutes avant toi et dont j'avais répondu la même chose : je pense pas que ce soit possible
asecher
Messages postés262Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention27 avril 20071 14 juin 2006 à 20:20
C'est bête quand même que l'on ne puisse pas cliquer sur le lien de DKS... Copier-coller et tout.... C'est long
En réfléchissant, on peut (peut-être) créer un objet (plutôt qu'une variable) qui selon une propriété, génère une erreur interceptée par la gestion d'erreur (certainement en place dans ce type de projet).
Mais, bon, moi, ce que j'en dis....
DarkSidious est maître en son royaume...
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 15 juin 2006 à 20:15
Il y a une autre solution, exécuter la procédure dans un Thread qui lui est propre.
Mais dans ce cas, il vaut mieux migrer vers .NET pour pouvoir gérer les threads proprement.
En VB6, il existe bien les API CreateThread, ExitThread, TerminateThread mais c'est une vraie galère pour les utiliser. Je ne suis jamais arrivé à m'en servir sans planter quelquechose mais peut-être que je m'y suis pris comme un manche.