36 lines
740 B
Racket
36 lines
740 B
Racket
#lang racket/base
|
|
(require racket/contract/base)
|
|
|
|
(define (spawn thunk)
|
|
(thread/suspend-to-kill thunk))
|
|
|
|
(define (channel)
|
|
(make-channel))
|
|
|
|
(define (channel-recv-evt ch)
|
|
ch)
|
|
|
|
(define (channel-send-evt ch v)
|
|
(wrap-evt
|
|
(channel-put-evt ch v)
|
|
void))
|
|
|
|
(define (thread-done-evt th)
|
|
(thread-dead-evt th))
|
|
|
|
(define (current-time)
|
|
(current-inexact-milliseconds))
|
|
(define (time-evt t)
|
|
(alarm-evt t))
|
|
|
|
(provide/contract
|
|
(spawn ((-> any) . -> . thread?))
|
|
(channel (-> channel?))
|
|
(channel-recv-evt (channel? . -> . evt?))
|
|
(channel-send-evt (channel? any/c . -> . evt?))
|
|
|
|
(thread-done-evt (thread? . -> . evt?))
|
|
(current-time (-> number?))
|
|
(time-evt (real? . -> . evt?)))
|
|
|