[cells-gtk-devel] Allegro 8.0 GUI multithreading
Peter Hildebrandt
peter.hildebrandt at gmail.com
Tue Feb 3 09:39:51 UTC 2009
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, <set at 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, set at 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 at common-lisp.net
>>> http://common-lisp.net/mailman/listinfo/cells-gtk-devel
>>>
>
>
> ---- Msg sent via WebMail
>
More information about the cells-gtk-devel
mailing list