From: Ken H. <ke...@ha...> - 2004-11-22 01:57:00
|
Lucas Hazel wrote: > On Sun, 21 Nov 2004 16:13:20 -0800 Ken Hayber <ke...@ha...> wrote: > > >> Tristan Mc Leay wrote: >> >>> On Sun, 21 Nov 2004 23:24:48 +1100, Lucas Hazel >>> <lu...@di...> wrote: >>> >>> >>>> On Sun, 21 Nov 2004 23:12:42 +1100 >>>> >>>> >>>> Tristan Mc Leay <the...@gm...> wrote: >>>> >>>> >>>> >>>>> On Sun, 21 Nov 2004 19:04:19 +1100, Lucas Hazel >>>>> <lu...@di...> wrote: >>>>> >>>>> >>>>>> On Sun, 21 Nov 2004 14:40:17 +1100 Lucas Hazel >>>>>> <lu...@di...> wrote: >>>>>> >>>>>> >>>>>> >>>>>>> New release is now ready for consumption, >>>>>>> http://digitillogic.net/ROXget-005.tar.bz2 >>>>>>> >>>>>> >>>>>> A friend of mine still gets a blocked ui, just wondering >>>>>> how many people out there find this is happening too, as >>>>>> since I added the threading code this has never happened to >>>>>> me. >>>>> >>>>> Yeah, I see no change between this one and the last... >>>>> >>>>> (If it helps, I'm using Python 2.3.4 on Slackware.) >>>>> >>>> >>>> *Sigh* >>>> >>>> Ok, the way I see it there a two ways I can gon on this: >>>> >>>> 1. Ditch the threads and have a play with the rox.tasks stuff >>>> 2. Rewrite the downloader module to use twisted >>>> >>>> In fact I think I will try them in that order. Oh well, back to >>>> the drawing board >>> >>> >>> Well, the question I'd be asking is how come it works for you but >>> not others? But I don't know anything about this... GUI >>> programming always gets me lost... >>> >> >> Tristan, >> >> It appears that you are not initializing GTK's thread handling. I >> had a lot of trouble with this in MusicBox and ended up having just >> one thread to play the actual song, but you still have to be >> careful about GTK and threads. It _may_ be as simple as this >> modified AppRun as long as you don't call GTK within your thread >> (it seems you only update the ui within a timeout function): >> >> ... gtk.threads_init() gtk.threads_enter() >> >> try: url = sys.argv[1] savebox = ROXget.SaveBox() >> savebox.set_url(url) savebox.show() savebox.run() except >> IndexError: rox.edit_options() rox.mainloop() >> >> gtk.threads_leave() ================ >> >> Anything in a thread that calls GTK functions must be surrounded by >> gtk.threads_enter/leave. >> >> I also looked at your save_to_stream method and it looks a little >> funky to me. You start a thread, then loop while waiting for the >> thread to end (status to change) meanwhile updating the GTK main >> loop. If the threading code is initialized right and you call >> threads_enter/leave appropriately, the run_main() call should not >> be necessary at all. >> >> Another way to handle it is not use threads at all, but put the >> run_main call inside your downloader.py write loop. The only reason >> I'm still using any threads in MusicBox now is performance - I get >> a lot of skipping if I try the run_main() method while playing. >> > > > Yeah, Tristan your code sucks :/ a) LOL b) Guess I got the owner/author wrong? |