开发者

sbcl debugging cl-gtk2-gk if the backend thread hangs

开发者 https://www.devze.com 2023-02-22 05:19 出处:网络
Some sample, straight forward gtk2 within-main-loop I\'m currently trying to add code at key-press-event

Some sample, straight forward gtk2 within-main-loop

I'm currently trying to add code at key-press-event

If I make an error in the guy code, the gui thread will hang in the repl, I can still get the repl back but I didn't find a way to continue with gui development without restarting sbcl and reloading all the packages

(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)))))

The error I get when I run this function is :

  • debugger invoked on a SIMPLE-ERROR in thread #: There is no applicable method for the generic function # when called with arguments (NIL).

With enough work I can fix the error, but everytime I get something broken in the gui I can't make the backend thread t开发者_如何学Co continue from where it hanged. I tried all kinds of thread functions. list-all-treads will show:

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

This is all I tried until now:

(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)))

I just can't get it unstuck.

What's your normal workflow with cl-gtk2-gtk, how do you avoid this problem?


Use sb-thread:release-foreground to switch between threads waiting for input. See Threads in SBCL for an example session.

0

精彩评论

暂无评论...
验证码 换一张
取 消