agenda: Add 8usleep.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Wed, 14 Dec 2016 23:41:50 +0000 (17:41 -0600)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Wed, 14 Dec 2016 23:45:01 +0000 (17:45 -0600)
* 8sync/agenda.scm (8usleep): New variable.
  (8sleep): Update to refer to argument as "secs" rather than "time".

8sync/agenda.scm

index da578a77f25a0ad839ba80f379ded4bac102d697..9884afc34ffd86ee05f95aed64c795ab84bb1663 100644 (file)
@@ -471,11 +471,25 @@ forge ahead in our current function!"
             (make-run-request (lambda () body ...) #f))))))
 
 ;; TODO: Rewrite when we move to this being just `sleep'.
-(define (8sleep time)
+(define (8sleep secs)
+  "Like sleep, but asynchronous."
   (8sync-abort-to-prompt
    (make-async-request
     (lambda (kont)
-      (make-run-request (lambda () (kont #f)) (tdelta time))))))
+      (make-run-request (lambda () (kont #f)) (tdelta secs))))))
+
+(define (8usleep usecs)
+  "Like usleep, but asynchronous."
+  (define (usecs->time-pair)
+    (if (< 1000000)
+        (cons 0 usecs)
+        (let* ((sec (floor (/ usecs 1000000)))
+               (msec (- usecs (* sec 1000000))))
+          (cons sec msec))))
+  (8sync-abort-to-prompt
+   (make-async-request
+    (lambda (kont)
+      (make-run-request (lambda () (kont #f)) (tdelta usecs->time-pair))))))
 
 ;; Voluntarily yield execution
 (define (yield)  ; @@: should this be define-inlinable?