2013-02-06 90 views

回答

5

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

是的。

名稱所有者可以更改:該如何車主可以隨時間而改變,雖然它沒有明確提到時,有在呼叫(原文中強調)的時間沒有業主的情況下,dbus_g_proxy_new_for_name會談OVER TIME,例如在兩個不同的方法調用之間,除非名稱是唯一的名稱。如果您需要一個固定的所有者,您需要請求當前所有者並將代理綁定到其唯一名稱,而不是通用名稱;請參閱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的激活甚至不被觸發,直到一個方法被調用後,如此明顯的名稱並不一定在此之前存在。

相關問題