windows - Målingstid med en opløsning af mikrosekunder i C ++?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg søger en måde at måle microsec på i C ++/Windows.


Jeg læser om 'ur' -funktionen, men den returnerer kun millisekunder ...

Er der en måde at gøre det på?

Bedste reference


Brug QueryPerformanceCounter og QueryPerformanceFrequency for fineste korn timing på Windows. [3] [4]


MSDN artiklen om kode timing med disse API'er her (prøvekode er i VB - beklager). [5]

Andre referencer 1


http://www.boost.org/doc/libs/1\_45\_0/doc/html/date\_time/posix\_time.html[6]


altough



  Få UTC-tiden ved hjælp af en sekundær opløsningsklokke. På Unix-systemer implementeres dette ved hjælp af GetTimeOfDay. På de fleste Win32 platforme implementeres det med ftime. Win32-systemer opnår ofte ikke mikrosecond opløsning via denne API. Hvis højere opløsning er kritisk for din applikation, test din platform for at se den opnåede opløsning.


Andre referencer 2


Der er to høj præcision (100 ns opløsning) ure tilgængelige i Windows:



  • GetSystemTimePreciseAsFileTime: 100ns opløsning, synkroniseret til UTC

  • QueryPerformanceCounter: 100ns opløsning, ikke synkroniseret til UTC



QueryPerformanceCounter er uafhængig af og er ikke synkroniseret til nogen ekstern tidsreference. Det er nyttigt til måling af absolutte tidsangivelser. [7] [8]


GetSystemTimePreciseAsFileTime er synkroniseret. Hvis din pc er ved at fremskynde eller sænke din klokke for at få den gradvist til at synkronisere med en tidsserver, vil GetSystemTimePreciseAsFileTime passende være langsommere eller hurtigere end absolutte tidsangivelser.


Vejledningen er:



  • hvis du har brug for UTC-synkroniserede tidsstempler til brug på tværs af flere systemer, f.eks. brug GetSystemTimePreciseAsFileTime

  • hvis du kun har brug for absolutte tidsintervaller: brug QueryPerformanceCounter



Bonuslæsning




  • MSDN: Erhvervelse af tidsstempler med høj opløsning

  • MSDN: QueryPerformanceCounter-funktion

  • MSDN: GetSystemTimePreciseAsFileTime funktion

  • MSDN: GetSystemTimeAdjustment funktionen (hvor du kan se om Windows kører din klokke hurtigere eller langsommere for at indhente den aktuelle sande UTC-tid)



Alle kerneniveau-sporingsinfrastrukturer i Windows bruger QueryPerformanceCounter til måling af absolutte tidsangivelser. [9] [10] [11] [12]


GetSystemTimeAsFileTime ville være nyttigt for noget som at logge.

Andre referencer 3


Nyere implementeringer kan levere tidsstempler til mikrosekunder på vinduer
med høj nøjagtighed. Den fælles brug af systemfiltiden og performance tælleren tillader det
sådanne nøjagtigheder se denne tråd eller også denne


En af de seneste implementeringer findes i Windows Timestamp Project [15].

Andre referencer 4


Jeg antager, at der ikke er noget galt med QuerPerformance * svaret allerede givet: spørgsmålet var for en Windows-specifik løsning, og det er det. For en C ++-løsning på tværs af platformen antager jeg, at chronoen giver mest mening. implementering bruger QuerPerformance * -metoderne, og du har straks også en Linux og Mac-løsning. [16]