git.fiddlerwoaroof.com
sbcl-concurrency-event-loop.lisp
f013defe
 (in-package :fwoar.event-loop)
 
 (defclass sb-concurrency-event-loop ()
   ((%queue :initarg :queue :reader queue :initform (sb-concurrency:make-mailbox))
    (%finish-callbaack :reader finish-cb :writer register-finish-cb)))
 
 (defmethod enqueue ((queue sb-concurrency:mailbox) fn)
   (sb-concurrency:send-message queue fn))
 
 (defmethod tick ((event-loop sb-concurrency-event-loop))
   (prog1 event-loop
     (let ((task (sb-concurrency:receive-message (queue event-loop) :timeout 0.001)))
       (when task
         (funcall task)))))