方法
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
。