;;; -*- mode: scheme; scheme48-package: rendezvous -*- ;;;; Rendezvous Concurrency Abstraction ;;;; Time Rendezvous ;;; This code is written by Taylor Campbell and placed in the Public ;;; Domain. All warranties are disclaimed. ;;;; Time Rendezvous (define (after-time-rendezvous time-delta) (make-time-rendezvous (lambda () (+ (real-time) time-delta)))) (define (at-real-time-rendezvous time) (make-time-rendezvous (lambda () time))) (define (make-time-rendezvous compute-revival-time) (polling-rendezvous (lambda () (let ((revival-time (compute-revival-time))) (if (> (real-time) revival-time) (values 0 (lambda (prepare-revival) ;; Trivially enabled; no revival. (values))) (values #f (lambda (suspension) (register-dozer! revival-time (lambda () ; liveness tester (not (suspension-revived? suspension))) (lambda () ; reviver (enter-critical-region (lambda (critical-token) (maybe-revive suspension critical-token ;; Null continuations. values values))))))))))))