#include "portable.h"
#include <math.h> /* floor */
-
#ifdef _XBT_WIN32
#include <sys/timeb.h>
+#include <windows.h>
#endif
double xbt_os_time(void)
void xbt_os_sleep(double sec)
{
-#ifdef HAVE_USLEEP
- sleep(sec);
- (void) usleep((sec - floor(sec)) * 1000000);
-#elif _XBT_WIN32
+#ifdef _XBT_WIN32
Sleep((floor(sec) * 1000) + ((sec - floor(sec)) * 1000));
-#else /* don't have usleep. Use select to sleep less than one second */
+#elif HAVE_NANOSLEEP
+ struct timespec ts;
+ ts.tv_sec = sec;
+ ts.tv_nsec = (sec - floor(sec)) * 1e9;
+ nanosleep (&ts, NULL);
+#else /* don't have nanosleep. Use select to sleep less than one second */
struct timeval timeout;
-
timeout.tv_sec = (unsigned long) (sec);
timeout.tv_usec = (sec - floor(sec)) * 1000000;