cs_nr
Messages postés164Date d'inscriptionmardi 16 décembre 2003StatutMembreDernière intervention11 juillet 2005
-
22 avril 2005 à 08:28
cs_LOFLO
Messages postés1Date d'inscriptionvendredi 12 août 2005StatutMembreDernière intervention25 septembre 2006
-
25 sept. 2006 à 16:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_LOFLO
Messages postés1Date d'inscriptionvendredi 12 août 2005StatutMembreDernière intervention25 septembre 2006 25 sept. 2006 à 16:13
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
rylryl
Messages postés311Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention15 décembre 20061 28 avril 2006 à 18:15
mekid_6
Messages postés1Date d'inscriptionvendredi 21 avril 2006StatutMembreDernière intervention28 avril 2006 28 avril 2006 à 16:03
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!
rylryl
Messages postés311Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention15 décembre 20061 23 avril 2005 à 18:01
Alors Jack que donnent tes tests exactement ?
bon pas bon ?
a+
ryl...
rylryl
Messages postés311Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention15 décembre 20061 23 avril 2005 à 11:41
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...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 avril 2005 à 01:49
Salut
Les microsecondes : faut peut-être pas trop rêver :
Combien de temps le processeur met-il pour interpreter tes instructions ?
Il y a de fortes chances pour que cela dure un peu plus longtemps qu'une microseconde.
En ce qui concerne GetTickCount : Cette horloge est précise à la milliseconde (garanti). Par contre, c'est le programme qui va attendre après une valeur particulière qui pénalisera la précision.
Vaste sujet déjà maintes fois évoqué sur le forum (des posts interminables de centaines de réponses ...)
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 23 avril 2005 à 01:43
salut a tous,
wai mais c'est pas une pause c'est juste occuper le proco en lui faisant faires des boucles inutilement
si tu veux faire des micro pause pour ralentir un peu l'application autant faire des
for i = 1 to 10
doevents
next i
ca reviendra au meme mais en plus simple
jessoulabrute
Messages postés33Date d'inscriptionsamedi 16 avril 2005StatutMembreDernière intervention28 avril 2005 22 avril 2005 à 23:12
C cool
rylryl
Messages postés311Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention15 décembre 20061 22 avril 2005 à 18:42
Bonjour ticomic,
"Sleep" ne gêre que les milliSecondes et d'une façon assez grossiere ainsi que "GetTickCount"...
Le code que je propose est capable de gerer les microSecondes et même au dela mais bon déja les microSecondes c'est pas mal !!!
voili...
a+
ryl...
ticomic
Messages postés57Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention29 avril 2005 22 avril 2005 à 18:02
Et pk pas avec gettickcount?
Private Sub pausep(ByVal tempsenmilisecondes As Long)
Dim ti As Long
ti = GetTickCount
1
If GetTickCount - ti < tempsenmilisecondes Then GoTo 1
End Sub
Je sais que je parle bcp lol, mais c juste pour apprendre
ticomic
Messages postés57Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention29 avril 2005 22 avril 2005 à 17:54
C pas sa que ca fait sleep?
(Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long))
Ou c'est autre chose?
rylryl
Messages postés311Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention15 décembre 20061 22 avril 2005 à 12:24
Merci a vous!
Oui c'est un peu gourmand mais pour s'attaquer aux µS !!!
Cependant grâce a Kenavo une petite amélioration est possible la voili...
'//////////////////////////
'// 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
dif = Time_memo + Round(MicroS * Frq_Base / 1000000) ' Calcul fait une seule fois
Do
QueryPerformanceCounter Time_now
Loop Until Time_now >= dif ' Si pause pas suffisante recommencer
End If
End Sub
a+
ryl...
cs_Obi
Messages postés1Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention22 avril 2005 22 avril 2005 à 09:40
Ca utilise 100% du processeur ta fonction wait, nan ?
Faudrait pouvoir dire à VS que cette fonction n'à pas la priorité...
cs_nr
Messages postés164Date d'inscriptionmardi 16 décembre 2003StatutMembreDernière intervention11 juillet 2005 22 avril 2005 à 08:28
Très interressant, je cherchais ca depuis un bout de temps !
25 sept. 2006 à 16:13
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
28 avril 2006 à 18:15
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...
28 avril 2006 à 16:03
d'avance merci!
23 avril 2005 à 18:01
bon pas bon ?
a+
ryl...
23 avril 2005 à 11:41
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...
23 avril 2005 à 01:49
Les microsecondes : faut peut-être pas trop rêver :
Combien de temps le processeur met-il pour interpreter tes instructions ?
Il y a de fortes chances pour que cela dure un peu plus longtemps qu'une microseconde.
En ce qui concerne GetTickCount : Cette horloge est précise à la milliseconde (garanti). Par contre, c'est le programme qui va attendre après une valeur particulière qui pénalisera la précision.
Vaste sujet déjà maintes fois évoqué sur le forum (des posts interminables de centaines de réponses ...)
23 avril 2005 à 01:43
wai mais c'est pas une pause c'est juste occuper le proco en lui faisant faires des boucles inutilement
si tu veux faire des micro pause pour ralentir un peu l'application autant faire des
for i = 1 to 10
doevents
next i
ca reviendra au meme mais en plus simple
22 avril 2005 à 23:12
22 avril 2005 à 18:42
"Sleep" ne gêre que les milliSecondes et d'une façon assez grossiere ainsi que "GetTickCount"...
Le code que je propose est capable de gerer les microSecondes et même au dela mais bon déja les microSecondes c'est pas mal !!!
voili...
a+
ryl...
22 avril 2005 à 18:02
Private Sub pausep(ByVal tempsenmilisecondes As Long)
Dim ti As Long
ti = GetTickCount
1
If GetTickCount - ti < tempsenmilisecondes Then GoTo 1
End Sub
Je sais que je parle bcp lol, mais c juste pour apprendre
22 avril 2005 à 17:54
(Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long))
Ou c'est autre chose?
22 avril 2005 à 12:24
Oui c'est un peu gourmand mais pour s'attaquer aux µS !!!
Cependant grâce a Kenavo une petite amélioration est possible la voili...
'//////////////////////////
'// 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
dif = Time_memo + Round(MicroS * Frq_Base / 1000000) ' Calcul fait une seule fois
Do
QueryPerformanceCounter Time_now
Loop Until Time_now >= dif ' Si pause pas suffisante recommencer
End If
End Sub
a+
ryl...
22 avril 2005 à 09:40
Faudrait pouvoir dire à VS que cette fonction n'à pas la priorité...
22 avril 2005 à 08:28
Merci