Bonjour à tous et à toutes.

Je suis sur un problème un peu énervant que j'aimerais vous faire partager. Il n'y a pas de raison que je sois le seul à être énervé un vendredi .

Je suis dans l'exécution d'un thread que je veux répéter toutes les secondes (en tenant compte du temps de traitement, cela va sans dire).
Je code donc :

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
 
 
  while not Terminated do
    begin
      StartTime := GetTickCount;    //début des manoeuvres
 
      Mon traitement;
      Synchronize('MonInterface');
 
      //  ElapsedTime := (1000 - (GetTickCount - StartTime));   //Je décompte le temps de traitement (GetTickCount - StartTime) de ma seconde
      //Sleep(ElapsedTime);                                                    //j'attends le temps nécessaire 
                                                                                         //OU (j'ai dépensé mon temps sans compter)
      while GetTickCount < (StartTime + 1000) do                  //je boucle tant que je ne suis pas arrivé à tps de traitement + ma seconde
        begin
        end;
    end;
Le problème est que, après avoir essayé des trucs que j'ai trop honte de vous rapporter, j'arrive toujours à une différence de 13 ou 14 milisecondes , des fois un peu plus, un peu moins, mais rarement.
Quelqu'un pourrait-il m'expliquer pouquoi ?

Merci d'avance.