关闭SDL 2创建的窗口后,REPL无响应(使用cl-sdl2)

时间:2017-09-04 17:40:38

标签: common-lisp sdl-2 read-eval-print-loop

我正在尝试使用cl-sdl2创建一个窗口。

我的代码有效 - 它会创建一个窗口2秒钟,然后关闭它:

(defun main ()
  (sdl2:with-init (:everything)
                  (sdl2:with-window (win :title "cl-sdl2 sample" :flags '(:shown :fullscreen))
                                    (let ((surf (sdl2:get-window-surface win)))
                                      (sdl2:fill-rect surf nil (sdl2:map-rgb (sdl2:surface-format surf) #xff #xff #xff))
                                      (sdl2:update-window win)
                                      (sdl2:delay 2000)))))

(main)

但是,窗口关闭后,repl(CCL)会卡住。我无法再评估表达式。 为什么会这样,我如何回到正常运作的代表?

就目前而言,每次运行样本进行测试时,我都必须继续产生新的CCL repl进程,这很快就会变得乏味。

我在MacOS Sierra上。

1 个答案:

答案 0 :(得分:0)

看起来这是cl-sdl2的已知问题,如下所示:https://github.com/lispgames/cl-sdl2/issues/89

目前提出的解决方法是将repl线程从主线程移出并通过单独的终端上的swank / slime连接到该线程,然后在主线程上运行sdl程序。示例如下所示。

(bt:make-thread (lambda () (swank:create-server :port 4005 :dont-close t)))
(sdl2:make-this-thread-main (lambda () (sdl2.kit:start)))