|
@@ -179,6 +179,15 @@ typedef struct {
|
|
|
pthread_t *waitingthreadhdls; /* The thread handles. */
|
|
|
} pthread_cond_t;
|
|
|
|
|
|
+typedef DWORD clockid_t;
|
|
|
+#define CLOCK_MONOTONIC (1)
|
|
|
+#define CLOCK_REALTIME (2)
|
|
|
+
|
|
|
+struct timespec {
|
|
|
+ time_t tv_sec; /* seconds */
|
|
|
+ long tv_nsec; /* nanoseconds */
|
|
|
+};
|
|
|
+
|
|
|
#define pid_t HANDLE // MINGW typedefs pid_t to int. Using #define here.
|
|
|
|
|
|
static int pthread_mutex_lock(pthread_mutex_t *);
|
|
@@ -1105,6 +1114,27 @@ static int pthread_mutex_unlock(pthread_mutex_t *mutex)
|
|
|
return ReleaseMutex(*mutex) == 0 ? -1 : 0;
|
|
|
}
|
|
|
|
|
|
+static int clock_gettime(clockid_t clk_id, struct timespec *tp)
|
|
|
+{
|
|
|
+ FILETIME ft;
|
|
|
+ ULARGE_INTEGER li;
|
|
|
+ BOOL ok = FALSE;
|
|
|
+
|
|
|
+ if (tp) {
|
|
|
+ if (clk_id == CLOCK_REALTIME) {
|
|
|
+ GetSystemTimeAsFileTime(&ft);
|
|
|
+ li.LowPart = ft.dwLowDateTime;
|
|
|
+ li.HighPart = ft.dwHighDateTime;
|
|
|
+ li.QuadPart -= 116444736000000000; /* 1.1.1970 in filedate */
|
|
|
+ tp->tv_sec = (time_t)(li.QuadPart / 10000000);
|
|
|
+ tp->tv_nsec = (long)(li.QuadPart % 10000000) * 100;
|
|
|
+ } else if (clk_id == CLOCK_MONOTONIC) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return ok ? 0 : -1;
|
|
|
+}
|
|
|
+
|
|
|
static int pthread_cond_init(pthread_cond_t *cv, const void *unused)
|
|
|
{
|
|
|
(void) unused;
|