On Wed, Feb 04, 2004 at 09:54:11PM -0800, Jeff Bowden wrote: > Jeff Bowden wrote: > > > > >The basic idea is this: You have some need in your pygtk app for some > >code to run asynchronously in a seperate thread (the "background > >task"). In order for it to be useful, you need two way communication > >between the background task and your main thread which handles all the > >GUI stuff. e.g. > > > >class BackgroundTask(threading.Thread): > > def __init__(self): > > threading.Thread.__init__(self) > > self.in_q = Queue.Queue() > > self.out_q = Queue.Queue() > > self.die = False > > # ... > > > > def run(self): > > while not self.die: > > args = self.in_q.get() > > result = self.do_stuff(*args) > > self.out_q.put(result) > > > > > >And then in your gtk idle function a fragment like this: > > > > if not background_task.out_q.empty(): > > result = background_task.out_q.get() > > > > # do stuff with the result... > > > >And then in whatever part of your program that initiates background > >tasks something like > > > > background_task.in_q.put(args) > > > > Oops. I went back and looked at some of my code and realized I left out > an important detail. The problem with what I wrote above is that I said > to put the out_q processing code in a gtk idle function and that implies > _polling_ which is sooo wrong. > > What I end up doing in my code is creating a pipe with os.pipe, passing > the write_end to the background task and passing the read_end to > gtk.input_add. When the background task wants to wake up with GUI > thread, it writes a single char to the pipe using os.write. > > Unfortunately, I don't know if this will work on Microsoft Windows. I > know that Windows python has os.pipe, but I have no idea if > gtk.input_add on Windows will accept and work with a pipe endpoint. I > don't have a windows machine here to test it out on. Does anyone know > about this?
My idea to handle this would be to create a new signal. Have a handler for this signal in the gui thread and let the background task emit this signal. Would this be workable? On Windows? -- Antoon Pardon _______________________________________________ pygtk mailing list [EMAIL PROTECTED] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/