gst_bus_add_watch()和g_signal_connect()之间的区别

我正在阅读GStreamer应用程序开发人员手册,该手册在消息处理/事件处理的上下文中讨论管道总线,他们讨论了两个函数:gst_bus_add_watch()和g_signal_connect()。 看来这两个function是可以互换的。 应用手册说:

请注意,如果您使用的是默认的GLib主循环集成,则可以连接到总线上的“消息”信号,而不是连接手表。

在第27页。这两个函数之间有什么区别,它们在哪些上下文中有用? 谁使用我们在这些函数中注册的回调? 元素本身是否会调用回调?

如果您正在使用gst_bus_add_watch(),那么您将提供一个在消息可用时将被调用的回调。

如果你调用gst_bus_add_signal_watch()然后注册一个默认的回调,它将把GSource注册到主循环。 这使得能够使用信号。

它是function明智的等价物,但如果您正在编写基于glib / gtk的应用程序,在任何地方使用信号可能会使您的代码更加一致。