Preliminary work towards threads on win32
[sbcl.git] / src / code / win32.lisp
index 25b00ad..1f8e7ed 100644 (file)
 
 ;;;; System Functions
 
-;;; Sleep for MILLISECONDS milliseconds.
+#!-sb-thread
 (define-alien-routine ("Sleep@4" millisleep) void
   (milliseconds dword))
 
+#!+sb-thread
+(defun sb!unix:nanosleep (sec nsec)
+  (let ((*allow-with-interrupts* *interrupts-enabled*))
+    (without-interrupts
+      (let ((timer (sb!impl::os-create-wtimer)))
+        (sb!impl::os-set-wtimer timer sec nsec)
+        (unwind-protect
+             (do () ((with-local-interrupts
+                       (zerop (sb!impl::os-wait-for-wtimer timer)))))
+          (sb!impl::os-close-wtimer timer))))))
+
 #!+sb-unicode
 (progn
   (defvar *ansi-codepage* nil)