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

how to attach glib signal callbacks to certain thread context

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

我希望在某些线程上下文中 "callback" 到 运行。

如有任何提示,我们将不胜感激

来自the GDBusProxy documentation

A GDBusProxy instance can be used from multiple threads but note that all signals (e.g. “g-signal”, “g-properties-changed” and “notify”) are emitted in the thread-default main context of the thread where the instance was constructed.

因此请确保 GMainContext you want the signals to be emitted in is the thread-default at the time you create the GDBusProxy. The typical pattern is to call g_main_context_push_thread_default() 在线程函数的开头,然后创建 GDBusProxy 并将信号连接到它,并将对象完全保留在该线程中。

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