Une petite pause, en microseconde.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 830 fois - Téléchargée 30 fois

Contenu du snippet

C'est rare mais des fois on ne veut pas que ça aille trop vite !

bonne pause !

ryl...

Source / Exemple :


Exemples d'utilisation:

DelayUS (1)			= 1 µS
DelayUS (100)			= 100 µS
DelayUS (100000)		= 100 mS
DelayUS (1000000)		= 1 S

			------------------------------------------

Option Explicit

Private Declare Function QueryPerformanceCounter Lib "kernel32" _
                                 (X As Currency) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "kernel32" _
                                 (X As Currency) As Boolean
                                 
                                 

'//////////////////////////
'// Attendre N microSeconde
Private Sub DelayUS(MicroS)
  Dim Frq_Base As Currency, Time_memo As Currency, Time_now As Currency
  Dim dif As Long
       
  If QueryPerformanceFrequency(Frq_Base) Then ' Base fréquence systême
    QueryPerformanceCounter Time_memo       ' Repère temps
    Do
        QueryPerformanceCounter Time_now    ' Comparer le Repère temps au temps qui
        dif = (Time_now - Time_memo) * 1000000 / Frq_Base  ' s'écoule
    Loop Until dif > MicroS          ' Si pause pas suffisante recommencer
  End If
End Sub

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
vendredi 12 août 2005
Statut
Membre
Dernière intervention
25 septembre 2006

Je ne suis vraiment pas sur qu'en utilisant les QueryPerformanceCounter et QueryPerformanceFrequence on puisse obtenir des tempos à la micro-seconde (voir 1000 µS) .

Je suis en train de développé une application en VB qui doit récupérer des données depuis une carte analogique sur PC , J'ai essayé vos fonctions car j'ai besoin de récuperer des données à 1000 µS (1 mS) , mon problème est que le délais de 1000 µS n'est pas toujours respecté. il arrive qu'il y ai des crêtes de 2000µS ou 3000 µS. Je pense que c'est Windows qui gère cela.

Y a t il un autre moyen pour palier à cela ? (peut être en faisant un morceau d'assembleur)
ou un programme dans une session DOS sous Windows ?

Salutations
Long
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Bonjour Mekid_6,

Tu utilise du C ce n'est pas le bon forum ici c'est du VB...
Regarde dans ce code il y a la même routine:
http://www.cppfrance.com/codes/PORT-PARALLELE-CONTROLEZ-MEDIAPLAYER-AVEC-TELECOMMANDE-TV-VCR_37224.aspx

Voili...
A+
ryl...
Messages postés
1
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
28 avril 2006

salut je suis nouveau dans le tas. Le probleme est que meme avec for et sleep on arrive pas a avoir une bonne vitesse, précisement avec for(i=0;i<3;i++) j'ai une vitesse visible a la sortie du port. je sais pas si quelqu'un a deja rencontré se probleme et peut m'apportert une solution
d'avance merci!
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Alors Jack que donnent tes tests exactement ?
bon pas bon ?

a+
ryl...
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Bonjour draluorg,
Le fait de faire une boucle "for next" c'est bien zoli mais tu n'auras pas les mêmes temps de "pause" sur des machines différentes (vitesse pross) donc pas utilisable.

ryl...
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.