[gst-devel] GStreamer in double loop

Arnout Vandecappelle arnout at mind.be
Sat Jun 20 11:55:11 CEST 2009

 [This is actually not about GStreamer anymore, but what the heck.]

On Friday 19 June 2009 00:48:39 Jeffrey Barish wrote:
> Here's what's baffling me.  This works:
>         loop = gobject.MainLoop()
>         context = loop.get_context()
>         while True:
>             context.iteration(False)
>             time.sleep(1.0)
> This doesn't:
>         loop = gobject.MainLoop()
>         context = loop.get_context()
>         while True:
>             context.iteration(True)

 Since you haven't registered any sources for the main loop, it will block 
forever.  And unless you created another thread or signal handler somewhere 
that calls loop.quit(), there is no way to get out of it.

> The difference is that the second one blocks on the iteration.  What is it
> about blocking that is incompatible with running this code in its own
> thread?

 AFAIK mainloops aren't really meant to be controlled from multiple threads.  
Inside the context.iteration(True), the mainloop will block waiting for an 
event on any of its registered sources.  Once it's blocking, I don't think 
adding a source from another thread interrupts the block.  You'd probably 
need to do a loop.quit() and re-run the mainloop.


Arnout Vandecappelle                               arnout at mind be
Senior Embedded Software Architect                 +32-16-286540
Essensium/Mind                                     http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium                BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  D206 D44B 5155 DF98 550D  3F2A 2213 88AA A1C7 C933

More information about the gstreamer-devel mailing list