我正在尝试在质子::连接对象的工作队列中添加质子::工作功能(打开一个新的发送者)。我有一个指向工作队列的指针,但是我的问题是如何正确绑定(bind)open_sender函数。

我在这里知道真正的问题:函数的参数:

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

当字符串通过引用传递时,我必须取消引用它。我可以,但是如何使用质子工具呢?

这是我的代码行:
proton::work w = proton::make_work( &proton::connection::open_sender, &m_connection, p_url);

注意 :
  • 当然,我的项目中没有使用C++ 11,这太简单了
    问;)!
  • 当然我不能更改为C++ 11
  • 如果您对如何在多线程程序中创建新发件人有更好的了解,请告诉我。
  • 最佳答案

    通常,您将在处理程序中使用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月的当前版本)。

    10-08 11:24