diff src/cutils.c @ 4086:ddc722b38e87

[project @ 2002-10-03 19:08:45 by jwe]
author jwe
date Thu, 03 Oct 2002 19:08:45 +0000
parents babc519f245b
children 0435429c1050
line wrap: on
line diff
--- a/src/cutils.c
+++ b/src/cutils.c
@@ -24,6 +24,17 @@
 #include <config.h>
 #endif
 
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined (__WIN32__) && ! defined (_POSIX_VERSION)
+
+#include <windows.h>
+
+#else
+
 #ifdef HAVE_UNISTD_H
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -39,37 +50,7 @@
 #include <sys/poll.h>
 #endif
 
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-static void
-do_octave_usleep (unsigned int useconds)
-{
-#if defined (HAVE_USLEEP)
-
-  usleep (useconds);
-
-#elif defined (HAVE_SELECT)
-
-  struct timeval delay;
-
-  delay.tv_sec = 0;
-  delay.tv_usec = useconds;
-
-  select (0, 0, 0, 0, &delay);
-
-#elif defined (HAVE_POLL)
-
-  struct pollfd pfd;
-  int delay = useconds / 1000;
-
-  if (delay > 0)
-    poll (&fd, 0, delay);
-
 #endif
-}
 
 void
 octave_sleep (unsigned int seconds)
@@ -88,9 +69,42 @@
   unsigned int usec = useconds % 1000000;
 
   if (sec > 0)
-    sleep (sec);
+    octave_sleep (sec);
+
+#if defined (__WIN32__) && ! defined (_POSIX_VERSION)
+
+  /* Round to the nearest millisecond, with a minimum of 1 millisecond
+     if usleep was called with a a non-zero value.  */
+
+  if (usec > 500)
+    Sleep ((usec+500)/1000);
+  else if (usec > 0)
+    Sleep (1);
+  else
+    Sleep (0);
+
+#elif defined (HAVE_USLEEP)
+
+  usleep (usec);
 
-  do_octave_usleep (usec);
+#elif defined (HAVE_SELECT)
+
+  struct timeval delay;
+
+  delay.tv_sec = 0;
+  delay.tv_usec = usec;
+
+  select (0, 0, 0, 0, &delay);
+
+#elif defined (HAVE_POLL)
+
+  struct pollfd pfd;
+  int delay = usec / 1000;
+
+  if (delay > 0)
+    poll (&fd, 0, delay);
+
+#endif
 }
 
 int