Hi Seth, thanks a lot for the comprehensive description. I am quite busy right now, but I will look into it. This will entail me installing Allegro on my win xp office machine, and as I am quite busy right now, it might take a few days (possibly until the weekend) until I get round to it. Sorry about that.
I have a hunch that it is connected to the g_thread_supported func, so my first shot would be to recompile the dll on windows with the new functions (since I do not have windows on my development box, I never did that). I am not a really a windows person, so I don't even know which tools to use, but we'll see ... I also remember reading that there was some issue with gdk/gtk and threading on windows in general, and that there was something special to take care of -- but since I was solely on linux and writing a thesis, I had other things on my mind. I'll get back to you in a few days. Cheers, Peter Btw, does it work w/o threading? On Tue, Feb 3, 2009 at 2:58 AM, <s...@tewebs.com> wrote: > 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