try a different approach to fix the windows monotonic counter

db4
Doug Coleman 2009-12-22 14:36:33 -06:00
parent c84f46fe8b
commit 7077cb4bfb
1 changed files with 6 additions and 8 deletions

View File

@ -43,9 +43,8 @@ u64 nano_count()
{
LARGE_INTEGER count;
LARGE_INTEGER frequency;
static u32 hi_correction = 0;
static u32 hi = 0xffffffff;
static u32 lo = 0xffffffff;
static u32 hi = 0;
static u32 lo = 0;
BOOL ret;
ret = QueryPerformanceCounter(&count);
if(ret == 0)
@ -54,14 +53,13 @@ u64 nano_count()
if(ret == 0)
fatal_error("QueryPerformanceFrequency", 0);
if((u32)count.LowPart < lo && (u32)count.HighPart == hi)
hi_correction++;
printf("hi = %u, lo = %u\n", hi, lo);
hi = count.HighPart;
if(count.LowPart < lo)
hi += 1;
lo = count.LowPart;
count.HighPart += hi_correction;
return count.QuadPart*(1000000000/frequency.QuadPart);
return (((u64)hi << 32) | (u64)lo)*(1000000000/frequency.QuadPart);
}
void sleep_nanos(u64 nsec)