r5rs中的时间或线程功能

时间:2013-04-02 19:51:03

标签: time scheme racket sleep r5rs

我做了一个游戏,它利用时间来计算重力对时间(速度和运动)的影响。虽然游戏主要使用r5rs函数,但我使用threadsleep和其他函数来更新和记住在球拍中定义的时间。 现在我想让微型游戏工作在只有r5rs的微控制器上。 是否可以仅使用r5rs制作类似的东西?

这是我目前使用的代码(使用球拍功能):

(define (make-timer)
  (define time 0) 
  (define wait-time (/ 1 CPU_FREQ))  
  (define timer-thread
    (thread (lambda ()
              (let loop ()
                (sleep wait-time)
                (set! time (+ 1 time))
                (loop)))))

  (define (dispatch msg)
    (cond ((eq? msg 'time) time)
          ((eq? msg 'start)
           (thread-resume timer-thread))
          ((eq? msg 'restart)
           (set! time 0)
           (thread-resume timer-thread))
          ((eq? msg 'reset)
           (thread-suspend timer-thread)
           (set! time 0))
          ((eq? msg 'stop) (thread-suspend timer-thread))
          ((eq? msg 'set-period!)
           (lambda (period)
             (set! wait-time (* (+ period 1) (/ 1 CPU_FREQ)))))
          ))
  (thread-suspend timer-thread)
  (set! time 0)
  dispatch)

1 个答案:

答案 0 :(得分:0)

不,在R5RS中没有线程原语(检查规范的index以查看可用的过程)。并且它不能仅仅根据R5RS实现,因为在某些时候您必须访问本机操作系统调用。