函数
Giobus_own_name
自:2.26
声明 [源]
guint
g_bus_own_name (
GBusType bus_type,
const gchar* name,
GBusNameOwnerFlags flags,
GBusAcquiredCallback bus_acquired_handler,
GBusNameAcquiredCallback name_acquired_handler,
GBusNameLostCallback name_lost_handler,
gpointer user_data,
GDestroyNotify user_data_free_func
)
描述 [源]
在由bus_type
指定的总线上开始获取name
,并分别在名称获取或丢失时调用name_acquired_handler
和name_lost_handler
。回调和线程由您调用此函数的线程的[g-thread-default main上下文][g-main-context-push-thread-default]调用。
您保证在调用此函数后,name_acquired_handler
和name_lost_handler
回调之一将被调用 - 有三种可能的情况
-
name_lost_handler
有一个NULL
连接(如果无法建立与总线的连接)。 -
然后
bus_acquired_handler
然后name_lost_handler
(如果无法获取名称) -
bus_acquired_handler
然后name_acquired_handler
(如果已获取名称)。
您拥有完名称后,只需使用此函数返回的所有权ID调用g_bus_unown_name()
。
如果在获取或丢失名称时(例如,如果允许替换,则另一个应用程序可以获取该名称或当前拥有该名称的应用程序退出),也会调用处理程序。如果用于尝试拥有名称的GDBusConnection
关闭,则调用name_lost_handler
,因为其他进程无法再访问该进程。
您不能多次使用g_bus_own_name()
对同一名称(除非与g_bus_unown_name()的调用交替) - 只有第一次调用将有效。
另一个保证是,name_acquired_handler
和name_lost_handler
的调用将交替进行;即,如果name_acquired_handler
被调用,那么您可以保证下- 次处理程序调用将是name_lost_handler
。反之亦然。
如果您打算导出对象(例如使用g_dbus_connection_register_object()),请注意,在name_acquired_handler
中导出对象通常太晚了。相反,您可以在bus_acquired_handler
中这样做,因为您保证这将在从总线请求名称之前运行。
这种行为使得编写想要[拥有名称][gdbus-owning-names]和导出对象的应用程序变得非常简单。只需在bus_acquired_handler
中注册要导出的对象,并在name_lost_handler
中取消注册对象(如果有)。
自:2.26
此函数的实现由语言绑定中的g_bus_own_name_with_closures()
提供。
参数
bus_type
-
类型:
GBusType
要拥有名称的总线类型。
name
-
类型:
const gchar*
要拥有的知名名称。
数据由函数的调用者拥有。 值是NUL终止的UTF-8字符串。 flags
-
GBusNameOwnerFlags
枚举的集合。 bus_acquired_handler
-
在连接到类型为
bus_type
的总线或NULL
时调用的处理程序。参数可以是 NULL
。 name_acquired_handler
-
当
name
被获取或为NULL
时调用的处理器。参数可以是 NULL
。 name_lost_handler
-
当
name
失去或为NULL
时调用的处理器。参数可以是 NULL
。 user_data
-
类型:
gpointer
传递给处理器的用户数据。
参数可以是 NULL
。数据由函数的调用者拥有。 user_data_free_func
-
类型:
GDestroyNotify
用于释放
user_data
或NULL
的函数。参数可以是 NULL
。