方法
GioDBusConnectionsignal_subscribe
自 2.26 版起
声明 [来源]
guint
g_dbus_connection_signal_subscribe (
GDBusConnection* connection,
const gchar* sender,
const gchar* interface_name,
const gchar* member,
const gchar* object_path,
const gchar* arg0,
GDBusSignalFlags flags,
GDBusSignalCallback callback,
gpointer user_data,
GDestroyNotify user_data_free_func
)
描述 [来源]
订阅在 connection 上的信号,并在接收到信号时调用 callback。请注意,callback 将在您调用此方法的线程的 [thread-default main context][g-main-context-push-thread-default] 中调用。
如果 connection 不是一个消息总线连接,则 sender 必须为 NULL。
如果 sender 是一个已知名称,请注意 callback 是使用 sender 的所有者的唯一名称而不是预期的已知名称调用的。这是因为消息总线重写了名称。因此,为了避免某些竞争条件,用户应跟踪已知名称的名称所有者并在处理接收到的信号时使用它。
如果提供了 G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_NAMESPACE 或 G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_PATH 之一,则 arg0 被解释为命名空间或路径的一部分。信号的第一个参数将与由 D-Bus 指定的一部分进行匹配。
如果user_data_free_func非NULL,它将在user_data不再需要之后(在调用此方法的线程的默认主上下文中)被调用。这并不保证在取消订阅信号时同步调用,并且可能在与connection销毁之后被调用。
由于callback可能会在一个与发出它的线程不同的线程中调用,因此在另一个线程中调用g_dbus_connection_signal_unsubscribe()之后,这种情况可能发生。因此,user_data应具有一个强引用,这个引用由user_data_free_func释放,而不是指向与信号订阅的生命周期相关的数据。例如,如果使用GObject存储从g_dbus_connection_signal_subscribe接收的订阅ID,则必须将对该GObject的强引用传递给user_data,并将g_object_unref()传递给user_data_free_func。您负责通过在最后一个外部引用到GObject时取消订阅信号来明确断开由此产生的引用计数循环。或者可以使用弱引用。
如果您使用与创建g_dbus_connection_signal_subscribe调用的同一线程中的g_dbus_connection_signal_unsubscribe()取消信号订阅,则可以保证在g_dbus_connection_signal_unsubscribe()返回后不会调用callback。
返回的订阅标识符是一个不透明的值,保证永远不会是零。
此函数永远不会失败。
自2.26版本开始提供。
参数
sender-
类型:
const gchar*要匹配的发送者名称(唯一或熟知名称)或
NULL,以监听所有发送者。参数可以 NULL。数据由方法调用者拥有。 这是一个以空字符终止的UTF-8字符串。 interface_name-
类型:
const gchar*D-Bus接口名称要匹配或
NULL以匹配所有接口。参数可以 NULL。数据由方法调用者拥有。 这是一个以空字符终止的UTF-8字符串。 member-
类型:
const gchar*D-Bus信号名称要匹配或
NULL以匹配所有信号。参数可以 NULL。数据由方法调用者拥有。 这是一个以空字符终止的UTF-8字符串。 object_path-
类型:
const gchar*要匹配的对象路径或
NULL以匹配所有对象路径。参数可以 NULL。数据由方法调用者拥有。 这是一个以空字符终止的UTF-8字符串。 arg0-
类型:
const gchar*要匹配的第一个字符串参数的内容或
NULL以匹配所有类型的参数。参数可以 NULL。数据由方法调用者拥有。 这是一个以空字符终止的UTF-8字符串。 flags-
类型:
GDBusSignalFlags描述如何在订阅信号时使用
GDBusSignalFlags的GDBusSignalFlags。 callback-
在匹配请求的数据时调用的回调。
user_data-
类型:
gpointer传递给
callback的用户数据。参数可以 NULL。数据由方法调用者拥有。 user_data_free_func-
类型:
GDestroyNotify取消订阅或
NULL时用于释放user_data的函数。参数可以 NULL。