hhhp2004
Messages postés173Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention13 octobre 2007
-
9 sept. 2006 à 05:18
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
10 sept. 2006 à 04:45
hhhp2004
salut,
mettez le code suivant dans un form et dites moi svp pourquoi time1 negale pas time2 (time1 est en millisecondes, time2 est en secondes ... donc quand time1=1000 time2=1) ... si vous mettez sleep(1) les 2 time ne nauront pas la meme valeur ex. time1=800 ms, time2 = 1 s .... si vous mettez sleep(1000) les 2 time seront egaux ...
mettez sur le form 2 timers, 1 commandbutton et 2 label
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 9 sept. 2006 à 06:42
C'est dû tout simplement à la longueur d'éxécution des instructions : un Sleep(1) est censé duré 1 ms, mais en réalité, il dure : le temps de l'appel de la fonction (environ 16 ms il me semble), puis le temps d'éxécution de la fonction, et enfin, la ms de pause !
Idem pour les timers : même si on peut mettre un interval de 1 ms, ils ne sont pas aussi précis et neu peuvent pas se déclancher toutes les millisecondes !
Il s'agit d'une question récurrente qui revient de temps en temps sur le forum, tu aurais cherché un peu avant de demander, tu aurais trouver ta réponse plus rapidement.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 9 sept. 2006 à 11:37
salut
pour sleep je ne sais pas le temps réel (calculable sur demande, mais forcément un peu variable selon les PC)
pour timer c'est 18ms min
ce test serait plus juste comme suit MAIS il sera forcément de plus en plus faussé dans la durée
(le doevents prend un temps variable sur chaque PC, etc....)
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim lTime1 As Long 'time in miliseconds
Dim lTime2 As Long
Private Sub Command1_Click()
Timer1.Interval = 10
Timer2.Interval = 100
Call timeLoop
End Sub
Private Sub timeLoop()
Do
DoEvents
Call Sleep(100)
lTime1 = lTime1 + 1
Loop
End Sub
Private Sub Timer1_Timer()
Label1.Caption = lTime1
End Sub
Private Sub Timer2_Timer()
lTime2 = lTime2 + 1
Label2.Caption = lTime2
End Sub
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 9 sept. 2006 à 21:07
toutes les millisecondes ? Tu n'as pas l'impression que ca fait très très court comme intervale et que ca risque bouffer toutes les ressources du proc ?
Pour obtenir un temps, le mieux c'est de travailler non pas sur un intervale de 1 ms et de compter le nombre de millisecondes comme cà (car cà bouffe tout les cycles de processeur !), mais de calculer l'intervale de temps (avec la fonction de l'API GetTickCount par exemple) entre deux temps régulier : par exemple, pour chaque frame de ton jeu affichée à l'écran, tu récupère le nombre de ms écoulées depuis la dernière frame affiché, ca évite ainsi de devoir calculer le nombre de ms entre chaque image affichée ! Il serait même bien plus efficace de le faire toutes les 10 ou 15 frames affichées si tu veux optimiser le traitement !
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 10 sept. 2006 à 04:45
salut,
moteur de jeu... tout dépend. je rejoins DarkSidious sur le principe mais tout dépend ta demande.
timer à 1ms c'est possible avec les API MIDI.
regarde dans mes sources (TIMER OCX) et lit les commentaires, tu y trouveras peut-être des pistes intéressantes.
NB : un intervalle ci court, réfléchi bien aux besoins réels. çà consomme vraiment énormément de ressources (100%?!!!)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp