Différence entre gst_bus_add_watch () et g_signal_connect ()

Je lis le manuel du développeur de l’application GStreamer, qui parle du bus de pipeline dans le contexte de la gestion des messages / des événements, et deux fonctions: gst_bus_add_watch () et g_signal_connect (). Il apparaît que ces 2 fonctions sont interchangeables. Le manuel d’application dit:

Notez que si vous utilisez l’intégration GLib mainloop par défaut, vous pouvez, au lieu de connecter une montre, vous connecter au signal de «message» sur le bus.

En page 27. Quelle est la différence entre ces 2 fonctions et dans quels contextes sont-elles utiles? Qui utilise les rappels que nous enregistrons dans ces fonctions? L’élément lui-même appelle-t-il les rappels?

Si vous utilisez gst_bus_add_watch (), vous fournissez un rappel qui sera appelé lorsqu’un message est disponible.

Si vous appelez gst_bus_add_signal_watch (), cela enregistre un rappel par défaut qui enregistrera un GSource dans la boucle principale. Cela permet d’utiliser des signaux.

C’est une fonctionnalité équivalente, mais si vous écrivez par exemple une application basée sur glib / gtk, l’utilisation de signal partout peut donner plus de cohérence à votre code.