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 :
Cordialement Baxter
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++; } }
Partager