From 489849db568c639eb5c0bdd92c40c15e41b4836a Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 15 Jan 2011 15:44:57 -0700 Subject: [PATCH] refine `sleep/yield' original commit: ab86ffa7783f626a6cff09652876b0b2fef279df --- collects/mred/private/misc.rkt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/collects/mred/private/misc.rkt b/collects/mred/private/misc.rkt index 4bc03500..5c4ac633 100644 --- a/collects/mred/private/misc.rkt +++ b/collects/mred/private/misc.rkt @@ -41,8 +41,14 @@ (define (sleep/yield secs) (unless (and (real? secs) (not (negative? secs))) (raise-type-error 'sleep/yield "non-negative real number" secs)) - (wx:yield (alarm-evt (+ (current-inexact-milliseconds) - (* secs 1000)))) + (let ([evt (alarm-evt (+ (current-inexact-milliseconds) + (* secs 1000)))]) + ;; First, allow at least some events to be handled even if + ;; the alarm is immediately ready. This makes `sleep/yield' + ;; more like `sleep': + (wx:yield) + ;; Now, realy sleep: + (wx:yield evt)) (void)) (define file-creator-and-type