Fonction SLEEP dans VBA ou VB

cipango Messages postés 26 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 29 juillet 2007 - 29 oct. 2006 à 21:53
cipango Messages postés 26 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 29 juillet 2007 - 30 oct. 2006 à 17:49
Bonjour à tous,



<!--[if !supportEmptyParas]--> <!--[endif]-->


J’ai un problème avec la fonction SLEEP : Quand je
fais  « SLEEP 1 » 20 fois de suite
sur 20 lignes de code, c’est plus long que lorsque je fais « SLEEP
20 ».


Pourtant 20 fois une milliseconde, ça fait bien 20
millisecondes, non ??? Y-a-t-il un « temps d’accès » non
négligeable à chaque lignes de codes ?


Vais-je devoir reprendre les antiques boucles de
temporisation pour temporiser mes instructions ?



<!--[if !supportEmptyParas]--> <!--[endif]-->


Je suis allé voir les codes liés à « sleep » dans
vbfrance. Apparemment, c’est normal que la fonction sleep « de
base », ( Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds
As Long) ) ne fonctionne pas avec des temps proche de la milliseconde. On
propose plein de trucs, mais franchement, je n’y comprends pas grand chose. Je
ne sais pas comment installer les fonctions proposées.


J’aimerais simplement avoir une fonction sleep qui
fonctionne même à 1 milliseconde.



<!--[if !supportEmptyParas]--> <!--[endif]-->


Merci d’avance.






Cipango

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 oct. 2006 à 22:04
ca viens effectivmement de l'intervalle transmis a la fonction Sleep.

Que cherches tu a faire, exactement ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cipango Messages postés 26 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 29 juillet 2007 1
29 oct. 2006 à 22:31
Je cherche à envoyer des signaux ( 0 V - 5 V ) à l'aide du port parallèle, pour allumer des leds. Tout marche bien sauf que quand je veux faire clignoter les leds rapidement, en intercalant par exemple un "sleep 1" entre chaque allumage de la led, et bien ça dure beaucoup plus longtenps qu'une milliseconde.

Cipango
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 oct. 2006 à 22:33
pourquoi as tu besoin d'une Tempo ?
(un DoEvents pourrais faire que la transaction serait effectuée,, je pense)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cipango Messages postés 26 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 29 juillet 2007 1
29 oct. 2006 à 22:41
Je veux qu'il y ai exactement 1 milliseconde ou 2 millisecondes par exemple entre chaque allumage d'une led.

Cipango
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
30 oct. 2006 à 07:59
"Je veux qu'il y ai exactement 1 milliseconde ou 2 millisecondes par exemple entre chaque allumage d'une led."

Tu n'y parviendras jamais, quelle que soit la méthode utilisée (y compris l'utilisation d'APIs beaucoup plus "fines") car :

Autant il est toujours possible de maitriser le moment du départ d'une instruction,

autant il ne l'est pas de "compter" la durée d'exécution de la dite instruction ... durée qui, en ce qui te concerne, dépendra de surcroît (en plus du reste) de la vitesse des dispositifs d'affichage  présentes sur ta machine !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
30 oct. 2006 à 08:15
Tiens... Lis donc ce sujet et tu comprendras ce que ceut dire mon message précédent :

http://www.vbfrance.com/infomsg_TEMPORISATION_834575.aspx#2
0
cipango Messages postés 26 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 29 juillet 2007 1
30 oct. 2006 à 10:16
Merci jmfmarques,
J'avais déjà lu le sujet sur l'oscillo avec le port série. Mais pour un oscillo, on a besoin de temporiser à la micoseconde près ( au moins... ) alors que pour mon bricolage je n'ai besoin que de la milliseconde. Si chaque "accès" au port parallèle prends 30 µs comme avec le port série, ce qui est probable, ce n'est pas dramatique devant une ms. Je pourrai corriger les éventuels et légers retards ou avances par d'autres moyens.
D'ailleurs, je suis en train d'essayer avec des temporisation du type for i = 0 to 10000000 : next i, et ça marche presque, même si ça n'est pas très élégant... et difficilement transposable d'un PC à l'autre.
Je crois, disons j'espère qu'il est possible de compter une durée de l'ordre d'une ms avec un PC. Parce que la ms, c'est quand même très long pour des instructions, non ? Même les antiques ports série et parallèle ne demande que 30 µs, apparemment...
Ce que j'aimerais pour le moment, c'est savoir utiliser les API "plus fines", comme tu les nommes justement.
Par exemple, j'ai trouvé une API sleep qui serait plus performante que la classique sleep de kernel32. Première chose, s'il existe une fonction sleep plus fine, pourquoi la précédente Kernel32 n'a-t-elle pas aussitôt disparu ? Et pourquoi est-ce aussi compliqué de l'installer. J'ai essayé en copiant la déclaration
 "Public
Declare
Function
Sleep Lib <var>"EX_Time.dll"</var>
Alias <var>"EXtmr_Sleep"</var> (ByVal lpEX As
String
, Optional
ByVal nTime As Long = 0) As Long

" dans un module ou dans une feuille et ça ne marche pas.
Avec l'ancienne Sleep il suffisait pourtant de copier simplement "Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)" dans un module et ça roule...
Je ne suis qu'un débutant, mais je ne comprends pas qu'on conserve par exemple une fonction sleep qui marche mal alors qu'il en exiiste une plus fine mais inabordable à un programmeur débutant.
Encore merci.

Cipango
0
cipango Messages postés 26 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 29 juillet 2007 1
30 oct. 2006 à 17:49
Bonsoir à tous,
Juste un petit up, pour voir si quelqu'un peut m'expliquer simplement les API...

Cipango
0
Rejoignez-nous