X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/111463df0d9a94d78e136d3d81ff828ea96a2cac..7788b754434ef923675b3c88c08a02afc147ea9b:/src/xbt/xbt_os_time.c diff --git a/src/xbt/xbt_os_time.c b/src/xbt/xbt_os_time.c index c74b4dd66f..b93b0f1e29 100644 --- a/src/xbt/xbt_os_time.c +++ b/src/xbt/xbt_os_time.c @@ -13,7 +13,41 @@ #include "xbt/xbt_os_time.h" /* this module */ #include "xbt/log.h" #include "portable.h" +#include /* floor */ +double xbt_os_time(void) { +#ifdef HAVE_GETTIMEOFDAY + struct timeval tv; + + gettimeofday(&tv, NULL); + + return (double)(tv.tv_sec + tv.tv_usec / 1000000.0); +#else + /* Poor resolution */ + return (double)(time(NULL)); +#endif /* HAVE_GETTIMEOFDAY? */ +} + +void xbt_os_sleep(double sec) { +#ifdef HAVE_USLEEP + sleep(sec); + (void)usleep( (sec - floor(sec)) * 1000000); + +#elif _WIN32 + + Sleep((floor(sec) * 1000) +((sec - floor(sec)) * 1000)); + + +#else /* don't have usleep. Use select to sleep less than one second */ + struct timeval timeout; + + + timeout.tv_sec = (unsigned long)(sec); + timeout.tv_usec = (sec - floor(sec)) * 1000000; + + select(0, NULL, NULL, NULL, &timeout); +#endif +} /** @brief like free @hideinitializer */