|
@@ -5,10 +5,84 @@
|
|
|
#include <time.h>
|
|
|
#include <signal.h>
|
|
|
#include <stdlib.h>
|
|
|
-#include <pthread.h>
|
|
|
-#include <unistd.h>
|
|
|
#include <stdbool.h>
|
|
|
#include "software_watchdog.h"
|
|
|
+#ifdef _WIN32
|
|
|
+ #define CLOCK_REALTIME 0
|
|
|
+ #define NOMINMAX
|
|
|
+ #define WIN32_LEAN_AND_MEAN
|
|
|
+ #include <windows.h>
|
|
|
+
|
|
|
+ int nanosleep(const struct timespec* req, struct timespec* rem) {
|
|
|
+ double ms;
|
|
|
+ ms = req->tv_sec * 1000.0 + req->tv_nsec / 1000000;
|
|
|
+ Sleep(ms);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ LARGE_INTEGER
|
|
|
+ getFILETIMEoffset()
|
|
|
+ {
|
|
|
+ SYSTEMTIME s;
|
|
|
+ FILETIME f;
|
|
|
+ LARGE_INTEGER t;
|
|
|
+
|
|
|
+ s.wYear = 1970;
|
|
|
+ s.wMonth = 1;
|
|
|
+ s.wDay = 1;
|
|
|
+ s.wHour = 0;
|
|
|
+ s.wMinute = 0;
|
|
|
+ s.wSecond = 0;
|
|
|
+ s.wMilliseconds = 0;
|
|
|
+ SystemTimeToFileTime(&s, &f);
|
|
|
+ t.QuadPart = f.dwHighDateTime;
|
|
|
+ t.QuadPart <<= 32;
|
|
|
+ t.QuadPart |= f.dwLowDateTime;
|
|
|
+ return (t);
|
|
|
+ }
|
|
|
+
|
|
|
+ int
|
|
|
+ clock_gettime(int X, struct timeval *tv)
|
|
|
+ {
|
|
|
+ LARGE_INTEGER t;
|
|
|
+ FILETIME f;
|
|
|
+ double microseconds;
|
|
|
+ static LARGE_INTEGER offset;
|
|
|
+ static double frequencyToMicroseconds;
|
|
|
+ static int initialized = 0;
|
|
|
+ static BOOL usePerformanceCounter = 0;
|
|
|
+
|
|
|
+ if (!initialized) {
|
|
|
+ LARGE_INTEGER performanceFrequency;
|
|
|
+ initialized = 1;
|
|
|
+ usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency);
|
|
|
+ if (usePerformanceCounter) {
|
|
|
+ QueryPerformanceCounter(&offset);
|
|
|
+ frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.;
|
|
|
+ } else {
|
|
|
+ offset = getFILETIMEoffset();
|
|
|
+ frequencyToMicroseconds = 10.;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (usePerformanceCounter) QueryPerformanceCounter(&t);
|
|
|
+ else {
|
|
|
+ GetSystemTimeAsFileTime(&f);
|
|
|
+ t.QuadPart = f.dwHighDateTime;
|
|
|
+ t.QuadPart <<= 32;
|
|
|
+ t.QuadPart |= f.dwLowDateTime;
|
|
|
+ }
|
|
|
+
|
|
|
+ t.QuadPart -= offset.QuadPart;
|
|
|
+ microseconds = (double)t.QuadPart / frequencyToMicroseconds;
|
|
|
+ t.QuadPart = microseconds;
|
|
|
+ tv->tv_sec = t.QuadPart / 1000000;
|
|
|
+ tv->tv_usec = t.QuadPart % 1000000;
|
|
|
+ return (0);
|
|
|
+ }
|
|
|
+#else
|
|
|
+ #include <pthread.h>
|
|
|
+ #include <unistd.h>
|
|
|
+#endif
|
|
|
|
|
|
#define CLOCKID CLOCK_REALTIME
|
|
|
#define SIG SIGRTMIN
|