2014-01-23 87 views
1

我想用dbusxx-xml2cpp生成C++头文件,其中一些方法是非阻塞的,例如,使用invoke_method_noreply而不是invoke_method。这可能吗?是否可以使用dbusxx-xml2cpp生成非阻塞呼叫?

例如,下面的XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<node name="/me/MyService"> 
    <interface name="me.MyService"> 
      <method name="MyMethod"> 
        <arg direction="in" type="s" name="argument"/> 
      </method> 
    </interface> 
</node> 

将产生(部分):

void MyMethod(const std::string& argument) 
{ 
    ::DBus::CallMessage call; 
    ::DBus::MessageIter wi = call.writer(); 

    wi << argument; 
    call.member("MyMethod"); 
    ::DBus::Message ret = invoke_method (call); 
} 

不过,我想有这样的:

void MyMethod(const std::string& argument) 
{ 
    ::DBus::CallMessage call; 
    ::DBus::MessageIter wi = call.writer(); 

    wi << argument; 
    call.member("MyMethod"); 
    bool ret = invoke_method_noreply (call); 
} 

回答

2

使用注释组织.freedesktop.DBus.Method.NoReply“

示例XML:

<node> 
    <interface name="org.test.example"> 
    <method name="NoReplyMethod"> 
     <arg name="data" direction="in" type="i"/> 
     <annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/> 
    </method> 
    </interface> 
</node> 

生成的代码:

void NoReplyMethod(const int32_t& data) 
{ 
    ::DBus::CallMessage call; 
    ::DBus::MessageIter wi = call.writer(); 

    wi << data; 
    call.member("NoReplyMethod"); 
    assert (invoke_method_noreply (call)); 
} 
+0

谢谢!你知道有关于这个的任何文件吗? – JoGr

+0

此链接提供了一些信息http://sourceforge.net/apps/mediawiki/dbus-cplusplus/index.php?title=Introspection_Format –