如何将 glib 信号回调附加到某些线程上下文

Pra*_*aur 2 dbus glib

所以基本上我正在编写以下步骤来创建基于 dbus 的应用程序。1. g_bus_watch_name(出现特定服务的回调) 2. g_signal_connect 附加到服务提供的某些信号。g_signal_connect(proxy,"xyz", G_CALLBACK(回调), NULL);

我希望“回调”在特定线程上下文中运行。

任何提示将不胜感激

Phi*_*all 5

GDBusProxy文档

GDBusProxy 实例可以在多个线程中使用,但请注意,所有信号(例如“g-signal”、“g-properties-changed”和“notify”)都在实例所在线程的线程默认主上下文中发出建。

因此,请确保GMainContext您希望发出的信号是您创建GDBusProxy. 典型的模式是g_main_context_push_thread_default()在线程函数开始时调用,然后创建GDBusProxy并连接信号到它,并将对象完全保留在该线程中。

有关使用 a 的推荐模式的更多信息GMainContext,请参阅教程。特别是,它建议GMainContext每个线程有一个(该线程的默认值),而不是在线程之间移动它们。虽然支持,但在线程之间移动上下文很慢(由于锁定),并且使得其余代码的控制流和线程安全性非常难以推理。