# gettimeofday unter Windows



## blackbirdthefirst (7. Juli 2006)

Hallo Zusammen,

ich schreibe gerade an einem Programm das mit Phtread arbeitet. Ich möchte dieses sowohl unter Linux als auch Windows einsetzten.

Bei verschiedenen Pthread Funktionen wie z.B. pthread_mutex_timedlock 
eine struct timespec als Paramter übergeben.

Das Problem ist nur das die Funktion gettimeofday unter Windows nicht vorhanden ist,
dann habe ich versucht was zu finden und bin auch fündig geworden:


```
#ifndef __GETTIMEOFDAY_C
#define __GETTIMEOFDAY_C

#if defined(_MSC_VER) || defined(_WINDOWS_)
   #include <time.h>
   #if !defined(_WINSOCK2API_) && !defined(_WINSOCKAPI_)
         struct timeval 
         {
            long tv_sec;
            long tv_usec;
         };
   #endif 
#else
   #include <sys/time.h>
#endif 
#if defined(_MSC_VER) || defined(_WINDOWS_)
   int gettimeofday(struct timeval* tv) 
   {
      union {
         long long ns100;
         FILETIME ft;
      } now;
     
      GetSystemTimeAsFileTime (&now.ft);
      tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);
      tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);
     return (0);
   }
#endif
#endif /* __GETTIMEOFDAY_C */
```


Aber leider kehr  pthread_mutex_timedlock dann immer noch sofort zurück, ich gehe mal davon aus das Windows ab 1 Jan 1601 und Linux ab 1Jan 1970 anfängt zu rechnen.

Was kann ich also machen damit die Sache auch unter Windows Funktioniert ?
Und warum wird die Zahl 116444736000000000LL subtrahiert ?


----------

