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