Bon je vais vous faire part de ma stupéfaction ...

dans mon appli je compte le temps qu'une info est a 1 ou a 0 (lecture d'entrée digital sur une carte PCI). Bon sa sa va.

Donc toute les seconde j'incrémente une variable si l'info est a 1, et j'incrémente une autre si elle a zéro.

Donc jai deux variable une qui indique le temps en seconde ou linfo a été a 1 et l'autre quand elle été a zéro.

En metant ces incrémentation dans un thread avec un sleep, jété pas très précis.

Donc jai esseyer avec un TTimer, Interval 1000.

Jai laiser l'appli compter, et jai afficher l'horloge windows a coté ... et surprise quand l'horloge windows a vue passé 15 min mon appli n'en a compter que 14min45s

Je pensais que le Timer avais une bonne précision a la seconde ... comment pourais palier a ce probléme, sans utiliser GetTickCount ?

voila le code du Timer pour info :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
void __fastcall TFormPrincipale::Timer1Timer(TObject *Sender)
{
        if(FormPrincipale->Machine1.bEnreData == true)
        {
                if(FormPrincipale->Machine1.bEntree1 == true)
                        FormPrincipale->Machine1.dTempsMarche++;
                else
                        FormPrincipale->Machine1.dTempsDarret++;
        }
        if(FormPrincipale->Machine2.bEnreData == true)
        {
                if(FormPrincipale->Machine2.bEntree1 == true)
                        FormPrincipale->Machine2.dTempsMarche++;
                else
                        FormPrincipale->Machine2.dTempsDarret++;
        }
        if(FormPrincipale->Machine3.bEnreData == true)
        {
                if(FormPrincipale->Machine3.bEntree1 == true)
                        FormPrincipale->Machine3.dTempsMarche++;
                else
                        FormPrincipale->Machine3.dTempsDarret++;
        }
        if(FormPrincipale->Machine4.bEnreData == true)
        {
                if(FormPrincipale->Machine4.bEntree1 == true)
                        FormPrincipale->Machine4.dTempsMarche++;
                else
                        FormPrincipale->Machine4.dTempsDarret++;
        }
        if(FormPrincipale->Machine5.bEnreData == true)
        {
                if(FormPrincipale->Machine5.bEntree1 == true)
                        FormPrincipale->Machine5.dTempsMarche++;
                else
                        FormPrincipale->Machine5.dTempsDarret++;
        }
}
Cordialement Baxter