diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-01-14 13:30:35 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-01-14 13:30:35 -0800 |
| commit | 2eace190e7715e6c48f33897acf7537576f7a412 (patch) | |
| tree | b8c778ba1216dbda9d7b0eef42e3f6bc5ce4441a /src/platform/windows | |
| parent | f4ce5a285167e7656037096f77f04ab80a010453 (diff) | |
| download | nng-2eace190e7715e6c48f33897acf7537576f7a412.tar.gz nng-2eace190e7715e6c48f33897acf7537576f7a412.tar.bz2 nng-2eace190e7715e6c48f33897acf7537576f7a412.zip | |
Use Windows tick clock instead of Performance counters.
Since we use the tick counter to sleep, we should use the same clock
for validation. The problem is that the high performance tick counter
on the CPU may be slightly out of agreement with the windows clock.
Furthermore, the tick counter is probably lots faster to retrieve since
it is already updated, and needn't be recalculated each time.
(We should consider just switching to millisecond clock resolution
internally as well. It turns out that I don't think that timers that
are shorter than 1ms are very useful.)
Diffstat (limited to 'src/platform/windows')
| -rw-r--r-- | src/platform/windows/win_clock.c | 13 | ||||
| -rw-r--r-- | src/platform/windows/win_thread.c | 2 |
2 files changed, 3 insertions, 12 deletions
diff --git a/src/platform/windows/win_clock.c b/src/platform/windows/win_clock.c index 3309be24..bdb2f550 100644 --- a/src/platform/windows/win_clock.c +++ b/src/platform/windows/win_clock.c @@ -14,17 +14,8 @@ nni_time nni_plat_clock(void) { - LARGE_INTEGER freq; - LARGE_INTEGER count; - double rate; - - QueryPerformanceFrequency(&freq); - QueryPerformanceCounter(&count); - - // convert to ticks per us - rate = (double) freq.QuadPart / 1000000.0; - - return ((nni_time) (count.QuadPart / rate)); + // We are limited by the system clock, but that is ok. + return (GetTickCount64()*1000); } diff --git a/src/platform/windows/win_thread.c b/src/platform/windows/win_thread.c index 631883fc..4d47f18e 100644 --- a/src/platform/windows/win_thread.c +++ b/src/platform/windows/win_thread.c @@ -95,7 +95,7 @@ nni_plat_cv_until(nni_plat_cv *cv, nni_time until) msec = 0; } else { // times are in usec, but win32 wants millis - msec = (until - now)/1000; + msec = ((until - now) + 999)/1000; } ok = SleepConditionVariableCS(&cv->cv, cv->cs, msec); |
