Qpid质子c ++ - 质子:: make_work

时间:2018-02-02 11:05:09

标签: c++ qpid

我试图在proton :: connection对象的工作队列中添加proton :: work函数(打开一个新的发送者)。我有一个指向工作队列的指针,但我的问题是如何正确绑定open_sender函数。

我在这里意识到真正的问题:函数的参数:

sender open_sender(const std::string& addr);

当字符串通过引用传递时,我必须取消引用它。我对此感到满意,但如何使用质子工具呢?

这是我的代码行:

proton::work w = proton::make_work( &proton::connection::open_sender, &m_connection, p_url);

注意:

  1. 当然我在我的项目中没有使用C ++ 11,这太简单了 问;)!
  2. 当然我无法改为C ++ 11
  3. 如果您对如何在多线程程序中创建新发件人有更好的了解,请与我们联系。

1 个答案:

答案 0 :(得分:1)

通常,您将使用处理程序中的proton::open_sender API进行连接打开或容器启动,因此在大多数情况下您不必使用proton::make_work。如果你看一下Proton C ++的例子,一个好的起点是simple_send.cpp。

缩写代码可能如下所示:

class simple_send : public proton::messaging_handler {
  private:
    proton::sender sender;
    const std::string url;
    const std::string addr;
...
  public:
    simple_send(...) :
      url(...), 
      addr(...)
    {}
...
    // This handler is called when the container starts
    void on_container_start(proton::container &c) {
        c.connect(url);
    }

    // This handler is called when the connection is open
    void on_connection_open(proton::connection& c) {
        sender = c.open_sender(addr);
    }
...
}

int main() {
...
  simple_send send(...);
  proton::container(send).run();
...
}

Proton C ++还有其他一些示例,可以帮助您找出使用Proton C ++的其他方法。请参阅https://github.com/apache/qpid-proton/tree/master/examples/cpp

您可以在http://qpid.apache.org/releases/qpid-proton-0.20.0/proton/cpp/api/index.html找到API文档(截至2018年2月的当前版本)。