方法

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_NAMESPACEG_DBUS_SIGNAL_FLAGS_MATCH_ARG0_PATH 之一,则 arg0 被解释为命名空间或路径的一部分。信号的第一个参数将与由 D-Bus 指定的一部分进行匹配。

如果user_data_free_funcNULL,它将在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

描述如何在订阅信号时使用GDBusSignalFlagsGDBusSignalFlags

callback

类型: GDBusSignalCallback

在匹配请求的数据时调用的回调。

user_data

类型: gpointer

传递给callback的用户数据。

参数可以NULL
数据由方法调用者拥有。
user_data_free_func

类型: GDestroyNotify

取消订阅或NULL时用于释放user_data的函数。

参数可以NULL

返回值

类型: guint

一个可以用于g_dbus_connection_signal_unsubscribe()的订阅标识符。