函数

Giobus_watch_name

自:2.26

声明 [src]

guint
g_bus_watch_name (
  GBusType bus_type,
  const gchar* name,
  GBusNameWatcherFlags flags,
  GBusNameAppearedCallback name_appeared_handler,
  GBusNameVanishedCallback name_vanished_handler,
  gpointer user_data,
  GDestroyNotify user_data_free_func
)

说明 [src]

开始监视 namebus_type 指定的总线上,当该名称已知有所有者时,分别调用 name_appeared_handlername_vanished_handler,已知失去了所有者。回调将在您调用此函数的线程的 [线程默认主上下文中][g-main-context-push-thread-default] 中调用。

可确保在调用此函数后将调用其中一个处理程序。当您不再监视名称时,只需使用此函数返回的观察者 ID 调用 g_bus_unwatch_name()

如果名称消失或出现(例如,拥有该名称的应用程序可能重新启动),也将调用处理程序。如果用于监视名称的 GDBusConnection 断开连接,则会调用 name_vanished_handler,因为不再可以访问该名称。

另一个保证是,保证交替调用 name_appeared_handlername_vanished_handler;也就是说,如果调用了 name_appeared_handler,那么您保证下次调用其中一个处理程序时,它将是 name_vanished_handler。反之亦然。

此行为使得编写想要在某个 [名称存在][gdbus-watching-names] 时采取操作的应用程序变得非常简单。基本上,应用程序应在 name_appeared_handler 中创建对象代理,并在 name_vanished_handler 中销毁它们(如果有)。

从 2.26 起可用

此函数的实现由语言绑定中的 g_bus_watch_name_with_closures() 提供。

参数

bus_type

类型: GBusType

监视名称所在总线的类型。

name

类型: const gchar*

要监视的名称(众所周知或唯一)。

数据归函数的调用者所有。
值是 NUL 终止的 UTF-8 字符串。
flags

类型: GBusNameWatcherFlags

GBusNameWatcherFlags 枚举中的标志。

name_appeared_handler

类型: GBusNameAppearedCallback

name 已知存在时调用的处理程序,或为 NULL

实参可以为 NULL
name_vanished_handler

类型: GBusNameVanishedCallback

name 已知不存在时调用的处理程序,或为 NULL

实参可以为 NULL
user_data

类型: gpointer

传递给处理程序的用户数据。

实参可以为 NULL
数据归函数的调用者所有。
user_data_free_func

类型: GDestroyNotify

释放 user_dataNULL 的函数。

实参可以为 NULL

返回值

类型: guint

一个标识符(从不为 0),可与 g_bus_unwatch_name() 配合使用以停止监视该名称。