2017-03-20 2 views
0

Je veux créer un déclencheur qui exécute quelque chose toutes les 500 ms, et il devrait être sans dérive dans le temps. Je le code en cours d'exécution pour montrer quelque chose dans pyopenglMinuteur précis utilisant l'heure python [au niveau des microsecondes]

def __init__(self): 
    ... 
    self.t_on = time.clock() 
    ... 
def display_gl(self): 
    ... 
    if (time.clock() - self.t_on) >= 0.500: 
     self.t_on = time.clock() 
     #do things 
    ... 

l'horloge est à la dérive au fil du temps, je pense que ce parce que la condition if rattrape le moment 500 ms après un peu de temps.

Y a-t-il un moyen d'éviter ce problème de dérive?

Résolu:
changé:

if (time.clock() - self.t_on) >= 0.500: 
    self.t_on = time.clock() 

à:

if (time.clock() - self.t_on) >= 0.500: 
    self.t_on =time.clock() - ((time.clock() - self.t_on) - 0.500) 
+0

vérifier le temps de votre instruction if puis en déduire si de 500ms, de sorte que le nouveau temps de temps + processus est exactement 500ms. –

Répondre

0

Résolu:
grâce à Mayeul sgc
changé:

if (time.clock() - self.t_on) >= 0.500: 
    self.t_on = time.clock() 

à:

if (time.clock() - self.t_on) >= 0.500: 
    self.t_on =time.clock() - ((time.clock() - self.t_on) - 0.500)