From 0e2308bc42f651f1a1cf983f5564db08e2d4a42b Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Tue, 21 Apr 2026 13:03:10 +0200 Subject: [PATCH] creating delayed reactor --- main.rkt | 1 + racket-webview.rkt | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/main.rkt b/main.rkt index 121ed09..6aba39c 100644 --- a/main.rkt +++ b/main.rkt @@ -27,4 +27,5 @@ webview-set-loglevel webview-version webview-info + webview-delayed-reactor ) diff --git a/racket-webview.rkt b/racket-webview.rkt index 86082e0..3c8387d 100644 --- a/racket-webview.rkt +++ b/racket-webview.rkt @@ -127,6 +127,8 @@ webview-quit webview-exit + webview-delayed-reactor + ;test ) @@ -1019,6 +1021,32 @@ (define (webview-info) (rkt-webview-info)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; delayed reactor +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define/contract (webview-delayed-reactor seconds value-callback) + (-> number? procedure? procedure?) + (let ((value-set-at -1) + (value 'none) + (wait-thread #f) + (ms (* seconds 1000)) + ) + (λ (val) + (set! value val) + (set! value-set-at (current-milliseconds)) + (when (eq? wait-thread #f) + (thread (λ () + (let loop () ((vsa value-set-at)) + (sleep seconds) + (let ((cms (current-milliseconds))) + (if (>= (- cms vsa) ms) + (begin + (set! wait-thread #f) + (value-callback value)) + (loop))))))) + ))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Quitting and waiting ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;