Re: Signal emission in multi-threading environment



Hi Stefan,

It is the simplest method!

Thanks Stefan and all people replied on this thread.

On Dec 8, 2007 6:23 PM, Stefan Kost <ensonic hora-obscura de> wrote:
Hi Ben,

Ben Lau schrieb:
hi all,

   I am implementing a GObject (a simple video player) that creates a
GStreamer pipeline for video processing. Soon it receives a new
GstBuffer of video frame from the pipeline, it will emit a signal. As
GStreamer processes the pipeline with multiple threads.  The signal
handler may not be involved inside the main thread. If my GObject
calls g_signal_emit() within the handler, then client's callback
function may also not be involved from the main thread.

You should use the GstBus. In the signal handler create an application message
and post it to the bus. The bus will marshall data and invoke signal handler in
you application thread. your app need to have signal handlers on the bus to
listen for the application message.
Here is an example:
http://buzztard.cvs.sourceforge.net/buzztard/buzztard/src/ui/edit/main-toolbar.c?view=markup
look for
on_channels_negotiated()

Stefan


  If the callback uses any Gdk/Gtk functions, then it may cause a race
condition. Ofcoz it could be avoided by using
gdk_threads_enter/gdk_threads_leave pair. However, I want to hide the
multi-threading issue from user ,so that they don't need to care
about.

 To achieve this purpose, the signal should be emitted within the main
thread. Could anybody suggest a method to ensure that a signal is
emitted within the main thread?

 I am thinking about to create a GSource to attach to the main
context. Soon a new frame is ready, it will dispatch the event to my
video player in main thread. But I wonder would it have any other
simpler method to achieve the goal?

Thanks for any advise.
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]