Timer : est-il fiable ?

Nichlas Messages postés 10 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 10 décembre 2006 - 10 déc. 2006 à 13:06
robotix76 Messages postés 1 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008 - 25 sept. 2008 à 13:31
Bonjour,

j'ai réalisé un chronomètre, mais je suis confronté à un problème. Selon la machine où je lance le chronomètre, les secondes avancent plus ou moins vites...

Sur le PC où j'ai créé le chronomètre, 15s valent 15s réelles, mais sur un autre PC le chronomètre affiche 20s alors que seulement 15s se sont écoulées.

C'est un problème connu ? C'est du à quoi ?

Merci.

9 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 déc. 2006 à 13:24
Salut,

oui, c'est connu. Peut-être devrais-tu utiliser les APIs SetTimer et KillTimer.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
Nichlas Messages postés 10 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 10 décembre 2006
10 déc. 2006 à 13:27
Merci, je vais tester ça alors

On sait à quoi est du ce problème sinon ?
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
10 déc. 2006 à 13:31
Salut, si tu utilises le contrôle Timer, quel est la valeur de l'intervalle et quel est le code que tu fais exécuter dans l'évènement MyTimer_Timer ?
Si on se réfère à la MSDN de vb6, il peut y avoir des différences suivant les machines, voir ci-dessous un extrait :

Lorsque vous programmez un contrôle Timer, vous devez prendre en compte certaines limites applicables à la propriété Interval :

<li>Si votre application ou une autre impose des demandes excessives au système (boucles longues, calculs intensifs, accès aux lecteurs, aux réseaux ou aux ports de communication), il se peut que votre application ne reçoive pas les événements de la minuterie aussi souvent qu'il est spécifié dans la propriété Interval.
</li><li>L'intervalle peut être compris entre 0 et 64 767 inclus, ce qui signifie que même l'intervalle le plus long sera seulement de l'ordre d'une minute (64,8 secondes environ).
</li><li>Il n'est pas garanti que l'intervalle ait toujours exactement la même durée. Pour assurer la précision, la minuterie doit vérifier l'horloge système chaque fois que c'est nécessaire plutôt que d'essayer de faire le suivi en interne du temps accumulé.
</li><li>Le système génère 18 tops d'horloge par seconde. Ainsi, bien que la propriété Interval soit mesurée en millisecondes, la précision véritable d'un intervalle n'excède pas un 1/18e de seconde. </li>
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
10 déc. 2006 à 13:33
Il y a aussi l'API GetTickCount à voir.
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 déc. 2006 à 13:34
Oui, Timer utilise une class produisant 18 tops par seconde (donc la précision est d' 1/18eme de seconde)
Donc c'est pas précis à 100% car le Timer vérifie l'horloge système de ton OS chaque fois que c'est nécessaire (et donc le temps de vérification lui-même prends du temps... mais qques milisecondes par-ci par-là, cela produit un écart)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 déc. 2006 à 13:42
Le fonctionnement du controle Timer est ainsi (selon mes propres mesures), l'interval indiqué n'est pas le temps qui sépare 2 lancement de la évènement timer. Mais c'est bien le temps qui sépare la fin de l'execution de l'évènement avec lme début du suivant.

Ainsi avec un interval de 100ms et une procédure qui met 50ms à s'executer completement, la procédure sera executer approximativement toutes les 150ms.

De plus le timer n'est pas du tout fiable en durée, interval est donné à +/- plusieurs % (de 2 à 10 suivant les machines, prog, charges cpu, ... selon mes mesures).

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Nichlas Messages postés 10 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 10 décembre 2006
10 déc. 2006 à 14:00
J'ai 4 Labels en fait, avec 4 Timers, pour afficher les centièmes, les secondes, les minutes et les heures.

----------------------------------------------
Private Sub TmrChrono_Timer()

    LblCent.Caption = LblCent.Caption + 1
    If LblCent.Caption = "60" Then
        LblSec.Caption = LblSec.Caption + 1
        TmrMilSec.Enabled = True

    If LblSec.Caption = "60" Then
        LblMin.Caption = LblMin.Caption + 1
        TmrSec.Enabled = True
    End If

    If LblMin.Caption = "60" Then
        LblHeure.Caption = LblHeure.Caption + 1
        TmrMin.Enabled = True
    End If

    End If
----------------------------------------------

Mes "interval" :
- heure : 1
- minute : 1
- seconde : 1
- centièeme : 10
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 déc. 2006 à 14:35
Aie, forcément, c'est ton algo qui coince, et c'est normal que tu obtienne des différences !

Il vaut mieux que tu calcule la différence entre une date et la date en cours : ce sera bien plus fiable !
0
robotix76 Messages postés 1 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008
25 sept. 2008 à 13:31
bonjour je voudrais savoir comment je pourai avoir le timer
merci d'avance
0
Rejoignez-nous