- return (double)(tv.tv_sec + tv.tv_usec / 1000000.0);
-#else
- /* Poor resolution */
- return (double)(time(NULL));
-#endif /* HAVE_GETTIMEOFDAY? */
+ return (double) (tv.tv_sec + tv.tv_usec / 1000000.0);
+}
+
+void xbt_os_sleep(double sec)
+{
+#ifdef HAVE_USLEEP
+ sleep(sec);
+ (void) usleep((sec - floor(sec)) * 1000000);
+
+#elif _XBT_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