user-interface - sbcl 调试 cl-gtk2-gk 如果后端线程挂起

标签 user-interface lisp common-lisp

主循环内的一些示例,直接的 gtk2

我目前正在尝试在按键事件中添加代码

如果我在 Guy 代码中犯了一个错误,gui 线程将卡在 repl 中,我仍然可以取回 repl,但我没有找到一种方法来继续 gui 开发而不重新启动 sbcl 并重新加载所有包

(defun run ()
  (within-main-loop
      ; match the controls that matter to vars
      (let ((window (builder-get-object builder "window"))
;....
           ; on window close keep the gtk running. helps with debugging
           (g-signal-connect search-field "key-press-event" (lambda (w) (declare (ignore w)) (format "~a" "danut")))
           (g-signal-connect window "destroy" (lambda (w) (declare (ignore w)) (leave-gtk-main)))
           (widget-show window)))))

运行此函数时出现的错误是:

  • 调试器在线程 # 中的简单错误上调用: 通用函数没有适用的方法 # 当带参数调用时 (无)。

通过足够的工作,我可以修复错误,但是每次我在 gui 中遇到问题时,我都无法使后端线程从挂起的位置继续。 我尝试了各种线程函数。列出所有踏板将显示:

(#<SB-THREAD:THREAD "cl-gtk2 main thread" RUNNING {CF48EF1}>
 #<SB-THREAD:THREAD "initial thread" RUNNING {AA5F591}>)

这是我到目前为止所尝试的:

(sb-thread:list-all-threads)

(sb-thread:interrupt-thread (first (sb-thread:list-all-threads)) #'leave-gtk-main)

(sb-thread:terminate-thread (first (sb-thread:list-all-threads)))

我就是无法摆脱它。

您使用 cl-gtk2-gtk 的正常工作流程是什么?如何避免此问题?

最佳答案

使用sb-thread:release-foreground在等待输入的线程之间切换。请参阅Threads in SBCL示例 session 。

关于user-interface - sbcl 调试 cl-gtk2-gk 如果后端线程挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5545343/

相关文章:

java - 似乎无法锁定我的 Jbutton。错误 : Cannot find symbol

python - 如何接受来自 pygame GUI 的文本输入

user-interface - gtk 格莱德需要帮助

lisp - 根据 Lisp 中的字符匹配对列表进行排序

lisp - LISP编程语言如何读取文件和保存数据

clojure - Sublime Text 和 Clojure : Don't pair single quotes

shell - 如何在 common lisp 中导航文件系统

java - 如何让JButton出现文字?

sockets - SBCL 套接字 : reuse-address

common-lisp - 如何检查cl-opengl中的着色器和程序错误?