In the Win32 API there is a function QueryPerformanceCounter that queries the value of a very high-resolution performance timer.
What is “high-resolution performance timer”? Is it supported by hardware? What systems does not support it?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Under Windows 7 on present generation processors, this is a reliable high precision (nanosecond) timer inside the CPU (HPET).
Under previous versions and on previous generations of processors, it is “something”, which can mean pretty much anything. Most commonly, it is the value returned by the RDTSC instruction (or an equivalent, on non-x86), which may or may not be reliable and clock-independent. Note that RDTSC (originally, by definition, but not any more now) does not measure time, it measures cycles.
On current-and-previous-generation CPUs, RDTSC is usually reliable and clock-independent (i.e. it is now really measuring time), on pre-previous generation, especially on mobile or some multi-cpu rigs it is not. The “timer” may accelerate and decelerate, and even be different on different CPUs, causing “time travel”.
Edit: The
constant tscflag in cpuid(0x80000007) can be used to tell whether RDTSC is reliable or not (though this does not really solve the problem, because what to do if it isn’t, if there is no alternative…).On yet older systems (like, 8-10 years old), some other timers may be used for QueryPerformanceCounter. Those may neither have high resolution at all, nor be terribly accurate.