2015-04-20 1 views
4

J'ai besoin de code qui fournira "Ticks" de 10 milisecondes exactement et je suis tamponné au vu des nombreux articles certains contredisant d'autres sur la façon d'accomplir cela dans Windows.Mesures fiables de durée courte sur Windows

J'ai géré la première étape - en utilisant la minuterie MultiMedia pour fournir des dortoirs de 1 mili.

Existe-t-il un moyen de s'assurer que le code de veille fonctionnera sur toutes les machines IsHighResolution vrai ou faux, systèmes à processeur unique ou multi-processeur, etc.?

[modifier] Une question précédente ragarding le problème avec l'utilisation StopWatch dans un système multicoeur: Multicore and thread aware .Net stopwatch? [/ modifier]

+0

Voulez-vous mesurer ces graduations ou voulez-vous appeler du code dans ces intervalles? Pour le premier, la meilleure solution est d'utiliser le chronomètre – Georg

+1

@Georg - pour appeler une méthode sur des intervalles exacts. En outre, vous semblez ignorer le problème avec StopWatch, jetez un oeil au lien que j'ai ajouté dans la question. – Joezer

+2

@ Maïmonide Ces problèmes ont tendance à ne pas se produire sur les processeurs récents (c'est-à-dire au cours des 5 dernières années) mais, dans tous les cas, peuvent être résolus en réglant l'affinité du fil. Mais il ne vous laissera pas dormir pendant un nombre exact de millisecondes. –

Répondre

0

désolé que je ne peux pas écrire ceci dans les commentaires ... Si vous avez la possibilité d'utiliser un second fil, vous pouvez utiliser une boucle pour perdre le temps ... comme ceci:

class yourTimer{ 
    public void startTimer(Action a) 
    { 
     ParameterizedThreadStart fu = new ParameterizedThreadStart(waiter); 
     Thread t1 = new Thread(fu); 
     t1.Start(a); 
    } 
    public void stopTimer() 
    private void waiter(object o) 
    { 
     Action ac = (Action)o; 
     while(waitin) 
     { 
      if(DateTime.Now.Millisecond%10==0) 
      { 
       ac.Invoke(); 
      } 
      continue; 
     } 
    } 
    } 

mais c'est une solution tout à fait laide, je pense ...