aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-01-14 13:30:35 -0800
committerGarrett D'Amore <garrett@damore.org>2017-01-14 13:30:35 -0800
commit2eace190e7715e6c48f33897acf7537576f7a412 (patch)
treeb8c778ba1216dbda9d7b0eef42e3f6bc5ce4441a /src
parentf4ce5a285167e7656037096f77f04ab80a010453 (diff)
downloadnng-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')
-rw-r--r--src/platform/windows/win_clock.c13
-rw-r--r--src/platform/windows/win_thread.c2
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);