Moritus
Messages postés130Date d'inscriptionjeudi 22 décembre 2005StatutMembreDernière intervention23 novembre 2011
-
15 déc. 2008 à 15:08
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
15 déc. 2008 à 23:44
bonjour,
J'ai découvert l'instruction do:..loop recamment et j'ai quelques questions
voici le code
Public Function do_loop(reg As Integer, bytes As Integer)
Select Case reg
Case Is = 1 'data
Do:
DoEvents
Loop Until read_Data(bytes) = 1
MsgBox "data fini"
Case Is = 2 'control
Do:
DoEvents
Loop Until read_Control(bytes) = 1
MsgBox "control fini"
End Select
End Function
Quand j'active mes deux loop, si la 2e se terminer (
read_Control(bytes) = 1), le message n'apparait que lorsque la première
loop se terminer ( read_Datal(bytes) = 1)
donc, a voir le résultat que ça me donne, j'en déduit qu'on ne peut pas mettre plusieurs do..loop dans une procédure...je me trompe??...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 déc. 2008 à 15:19
(edit : désolé je corrige mes fautes )
salut,
gni?
pas clair.....
"Quand j'active mes deux loop"
tu peux avoir plusieurs boucles dans une procédure...
par
contre elles ne sont pas activées "en même temps". quand tu es dans
une boucle, tu n'es pas en même temps dans une autre...
de plus ici de toute façon, avec un SELECT CASE, tu passes forcément soit par l'une, soit par l'autre (ou aucune)
ps : FONCTION retourne un résultat...
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 déc. 2008 à 19:09
qu'un loop à la fois dans le sens que chaque ligne est executée à la suite....
ton code appelant ne va pas simultanément appeler do_loop.case1 et do_loop.case2
une
fois do_loop.case1 terminé et donc ton code sorti de la procédure (qui
n'aura pas exécuté le de_loop.case2), ta procédure appelante va reprendre la
main sous la ligne d'appel de do_loop.case1, et va continuer jusqu'à la
fin.
si sur son chemin elle rencontre do_loop.case2, de
nouveau ton code va "y aller", exécuter ce code, en sortir, et on
continue jusqu'à la sortie complète de ta procédure appelante
un bout de code pour mieux comprendre peut-être...
Option Explicit
'
Private Sub
Form_Load()
Debug.Print "-- ENTREE 'Form_Load' : je suis la toute première prodédure"
Call Sub1
Debug.Print "-- SORTIE 'Form_Load' : j'étais la toute première prodédure"
Unload Me
End Sub
'
Sub Sub1()
Debug.Print "---- ENTREE 'Sub1' : je suis 2ème prodédure"
Call Sub2(50)
Debug.Print "---- MILIEU 'Sub1' : je suis ligne au milieu de la 2ème prodédure"
Call Sub2(300)
Debug.Print "---- SORTIE 'Sub1' : j'étais la 2ème prodédure"
End Sub
'
Sub Sub2(ByVal i As Integer)
Debug.Print "------ ENTREE 'Sub2' : je suis 3ème prodédure"
Debug.Print "------ MILIEU 'Sub2' : je suis ligne au milieu de la 3ème prodédure, j'ai eu une valeur en paramètre : [ " & i & " ]"
Debug.Print "------ SORTIE 'Sub2' : j'étais la 3ème prodédure"
End Sub
-- ENTREE 'Form_Load' : je suis la toute première prodédure
---- ENTREE 'Sub1' : je suis 2ème prodédure
------ ENTREE 'Sub2' : je suis 3ème prodédure
------ MILIEU '
Sub2
' : je suis ligne au milieu de la 3ème prodédure, j'ai eu une valeur en paramètre : [ 50 ]
------ SORTIE '
Sub2
' : j'étais la 3ème prodédure
---- MILIEU '
Sub1
' : je suis ligne au milieu de la 2ème prodédure
------ ENTREE '
Sub2
' : je suis 3ème prodédure
------ MILIEU '
Sub2
' : je suis ligne au milieu de la 3ème prodédure, j'ai eu une valeur en paramètre : [ 300 ]
------ SORTIE '
Sub2
' : j'étais la 3ème prodédure
---- SORTIE '
Sub1
' : j'étais la 2ème prodédure
-- SORTIE '
Form_Load
' : j'étais la toute première prodédure
c'est plus clair?
++
<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp