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

时间:2013-02-06 09:59:13

标签: unix glib dbus

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

1 个答案:

答案 0 :(得分:5)

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

是。 dbus_g_proxy_new_for_name讨论了所有者如何随着时间的推移而改变,尽管没有明确提到在电话会议时没有所有者的情况(原始重点):

  

名称所有者可能会在一段时间内更改,例如在两个不同的方法调用之间,除非名称是唯一名称。如果您需要固定所有者,则需要请求当前所有者并将代理绑定到其唯一名称而不是通用名称;请参阅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激活,所以显然名称在此之前不一定存在。