2008-09-25 8 views
1

Cet article sur le site net tech de Microsoft fournit une exe qui calcule la résolution minimum de temps de votre machine Windows - cela devrait être le plus petit « tick » disponible pour toute application sur cette machine:Comment une application (chrome, flash, etc.) obtient-elle une résolution temporelle supérieure à la résolution temporelle du système?

http://technet.microsoft.com/en-us/sysinternals/bb897568.aspx

Le résultat de l'exécution de cette application sur ma boîte actuelle est de 15,625 ms. J'ai également effectué des tests sur Internet Explorer et obtenu exactement la même résolution à partir de la fonction javascript Date(). Ce qui est déroutant, c'est que le test SAME que j'ai effectué contre IE donne une résolution beaucoup plus fine pour le navigateur Chrome de Google (résolution de 1ms) et pour un film Flash fonctionnant sous IE (1ms). Quelqu'un peut-il expliquer comment une application peut obtenir une meilleure résolution d'horloge que l'horloge de la machine? Si oui, y a-t-il un moyen d'obtenir une résolution toujours meilleure dans les navigateurs autres que Chrome (sans flash)?

La première réponse conduit à deux autres ci-dessous les questions:

  1. Comment une minuterie multimédia obtenir temps entre l'horloge système tiques. I Imaginez l'horloge du système comme une montre analogique avec une main qui passe, chaque tick étant de 15ms. Comment sont mesurés les temps entre les tiques?
  2. Les temporisateurs multimédias sont-ils disponibles pour les navigateurs , en particulier Internet Explorer? Puis-je en accéder un avec C# ou Javascipt sans avoir à pousser le logiciel vers le navigateur/la machine d'un utilisateur?
+0

Ils sont disponibles à tous les Lisez les docs – VVS

+0

David - s'il y a un timer Javascript avec une meilleure résolution que Date(), ce n'est pas clair (comme vous le suggérez) ce que c'est, d'où la question – WillR

Répondre

4

Vous pouvez descendre à 1 ms avec multimedia timers et encore plus loin avec QueryPerformanceCounter.

Voir aussi GetLocalTime() API time resolution.

EDIT: réponse partielle à la nouvelle sous-question ...

résolution temporelle du système était d'environ 15 ms sur l'architecture de Windows 3 et 95. Sur NT (et successeurs) vous pouvez obtenir une meilleure résolution de la couche d'abstraction matérielle (HAL). L'article QueryPerformanceCounter counts elapsed time, not CPU cycles, écrit par le Raymond Chen, peut vous donner quelques idées supplémentaires. En ce qui concerne les navigateurs - je n'ai aucune idée de ce qu'ils utilisent pour les minuteries et comment ils interagissent avec le système d'exploitation.

+0

Intéressant. : – WillR

+0

Malheureusement, pré-Vista le réglage est gl obal (par ex. tous les temporisateurs du système deviennent plus élevés, ce qui peut causer des problèmes); Il fait également de très mauvaises choses à l'utilisation de puissance (bien que je ne sais pas dans quelle mesure cela dépend de l'OS) – olliej

0

Le APIC du processeur fonctionne à la vitesse du bus et dispose d'une minuterie. Ils peuvent utiliser cela à la place de l'heure du système. (Ou ils pourraient juste donner un tas de précision qui n'est pas là.)

Cette description of the Local APIC mentionne l'utiliser comme une minuterie.

(Il peut également être le cas qu'il existe un compteur de performance qu'ils utilisent. Cela semble en fait plus probable que d'un pilote de périphérique serait nécessaire pour programmer l'APIC.)

1

Regardez l'API timeBeginPeriod. De MSDN: "Cette fonction affecte un paramètre Windows global.Windows utilise la valeur la plus basse (c'est-à-dire la résolution la plus élevée) demandée par n'importe quel processus."

http://msdn.microsoft.com/en-us/library/ms713413(VS.85).aspx

(Markdown n'a pas aimé parens dans l'URL)

Voir " A l'intérieur de Windows NT haute résolution Timers" référencé à partir du lien que vous avez posté

+0

Dans les URL, vous pouvez remplacer en toute sécurité les parens d'ouverture avec% 28 et la clôture avec% 29. Cela fonctionne autour de l'ennui markdown. –

Questions connexes