Hi! First, I'm actually using Allegro 8.1, not 8.0, under windows xp. I'm using cells-gtk3. For a summary, i believe the code stalls in the main-loop function in the file gtk-app when (gtk-main) is called. I believe gtk-main directly calls a foreign function.
For reference, my test code is as follows: (defpackage :test (:use :cl :cells :cells-gtk)) (in-package :test) (defvar *width* 300) (defvar *height* 300) (defmodel click-button (vbox) () (:default-initargs :kids (c? (the-kids (mk-button :width *width* :height *height* :on-clicked (callback (widget event data))))))) (defmodel stay-awake-gui (gtk-app) () (:default-initargs :width *width* :height *height* :kids (c? (the-kids (make-instance 'click-button :fm-parent *parent*))))) (defun start-button-monitor () (cgtk::start-win 'stay-awake-gui)) (let ((*gtk-debug* t)) (cgtk::with-trcs (start-button-monitor))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; I'm not using the libcellsgtk dll because all the dlls i can find do not have the gtk-adds-g-thread-supported function in them which is required. I'm using cells-gtk3, and these dlls i find aren't for this cells-gtk version. Bordeaux threads is supported for allegro on windows according to the Common Lisp Directory. I also tried a simple example, and it worked. I tried turning debug on, but I think there is no traces between the points the error is taking place. I only got: ; Foreign loading libgobject-2.0-0.dll. ; Foreign loading libglib-2.0-0.dll. ; Foreign loading libgthread-2.0-0.dll. ; Foreign loading libgdk-win32-2.0-0.dll. ; Foreign loading libgtk-win32-2.0-0.dll. ; Foreign loading C:\Program Files\clisp-2.45\Lisp Libraries\cells-gtk3\gtk-ffi\libcellsgtk.dll -----UTILS--RESET-------- ;;or something like this However, using allegro's stepper, I believe this is the place where allegro stalls. Start-win calls start-gtk-main which in turn calls gtk-main-thread which then calls main-loop where everything stalls. ;;in function start-gtk-main (threads:make-thread #'(lambda () (let ((*standard-output* so)) (gtk-thread))) :name "gtk-main-thread")) ;;closure surrounding start-gtk-main which includes gtk-thread function (progn (let ((gtk-main-thread nil)) (flet ((gtk-thread () (gdk-threads-register-gtk-main (threads:current-thread)) (setf gtk-main-thread (threads:current-thread)) (loop (main-loop)))) ;;piece of function in which allegro stalls ;;specifically, the line ;;#-lispworks (gtk-main) (defun main-loop () "Run GTK Main until user signal quit. Errors are caught and displayed in a dialog, providing the user with the option to \"recklessly continue\" -- not to be called directly" (unwind-protect (if (eql *using-thread* 'yes) (loop until (restart-case (handler-bind ((gtk-continuable-error #'(lambda (condition) (invoke-restart 'continue-from-error condition ))) (error #'(lambda (con) (invoke-restart 'report-error con)))) #-lispworks (gtk-main) ;;<-----Stalls Here ;; Despite a workaround for Slime (see FAQ), the gtk-main-iteration-do loop, ;; still appears to be necessary for LW. Otherwise, LW consumes 99% of CPU. #+lispworks ; give slime a chance. (loop (loop while (gtk-events-pending) do (gtk-main-iteration-do nil)) (process-wait-with-timeout .01 "GTK event loop waiting")) t) Thanks! Seth >Hi, > >Unfortunately I only have SBCL over here (linux), so here's a few >comments off the top of my head: > >To understand your problem better, which platform are you on, linux or windows? > >Have you tried using libcellsgtk? When you're on linux, compiling it >is pretty straight forward, and for windows there are downloadable >versions. Someone here might be able to provide a compiled version if >you give us specifics on your set up. > >Have you activated cells-gtk's tracing? Have a look at gtk-app.lisp >(I believe -- currently I am on an office machine with Win XP and no >development tools), there's a feature like "debug" or something which >you can use to activate tracing. That might help, too. > >Furthermore, how's bordeaux-threads with allegro on your platform? Is >that all cleared (check the bordeaux-threads homepage). > >If you send a trace (preferably the cells-gtk debug output) and some >more info on your environment, I might be able to give better advice. > >Thanks, > >Peter > >On Sun, Feb 1, 2009 at 3:28 PM, s...@tewebs.com> wrote: >> I'm trying to produce a multithreaded GUI in Allegro 8.0. >> However, once i try start-win, everything freezes. I traaced it back, and it >> appears that it stars freezing in the main-loop function, specifically when >> gtk-main is called. In addition, i tried to use the lispworks specific code >> in >> the main-loop function marked with #+lispworks, and it still freezes. >> >> Notice that I am not using the libcellsgtk dll which is necessary for some >> aspects. Is this the problem? >> >> Any help would be appreciated! >> Thxs! >> >> >> >> >> >> _______________________________________________ >> cells-gtk-devel site list >> cells-gtk-devel@common-lisp.net >> http://common-lisp.net/mailman/listinfo/cells-gtk-devel >> ---- Msg sent via WebMail _______________________________________________ cells-gtk-devel site list cells-gtk-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/cells-gtk-devel