gpt4 book ai didi

unix - 应用程序需要运行 dbus_g_proxy_new_for_name 才能工作吗?

转载 作者:行者123 更新时间:2023-12-01 11:46:40 26 4
gpt4 key购买 nike

我可以在没有启动和运行实现 D-Bus 方法的应用程序的情况下调用 dbus_g_proxy_new_for_name 吗?我不确定这样做是否是一种好的做法,或者是否常见。

最佳答案

在我回答之前,我想指出 DBus-GLib is deprecated 。但是,答案适用于 g_dbus_proxy_new (这基本上也是 dbus_g_proxy_new_for_name 的替代品)。

是的。 dbus_g_proxy_new_for_name讨论所有者如何随时间变化,尽管它没有明确提及调用时没有所有者的情况(原始重点):

THE NAME OWNER MAY CHANGE OVER TIME, for example between two different method calls, unless the name is a unique name. If you need a fixed owner, you need to request the current owner and bind a proxy to its unique name rather than to the generic name; see dbus_g_proxy_new_for_name_owner().

在 D-Bus 激活中使用它实际上很常见。查看 Raphaël Slinckx' DBus Activation Tutorial 的“客户端实现”部分.它包括这个片段(注意评论):

/* This won't trigger activation! */
proxy = dbus_g_proxy_new_for_name (connection,
"org.gnome.ServiceName",
"/org/gnome/ServiceName",
"org.gnome.ServiceName");

/* The method call will trigger activation, more on that later */
if (!org_gnome_ServiceName_echo_string (proxy, "The string we want echo-ed", &result, &error))
{
/* Method failed, the GError is set, let's warn everyone */
g_warning ("Woops remote method failed: %s", error->message);
g_error_free (error);
return;
}

D-Bus 激活甚至在方法被调用之后才会被触发,因此显然名称在此之前不一定存在。

关于unix - 应用程序需要运行 dbus_g_proxy_new_for_name 才能工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14726150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com