相关疑难解决方法(0)

如何欺骗boost :: asio以允许只移动处理程序

在RPC通信协议中,在调用方法之后,我将"完成"消息发送回调用者.由于以并发方式调用方法,因此包含响应(a std::string)的缓冲区需要由互斥锁保护.我想要实现的目标如下:

void connection::send_response()
{
    // block until previous response is sent
    std::unique_lock<std::mutex> locker(response_mutex_);

    // prepare response
    response_ = "foo";

    // send response back to caller. move the unique_lock into the binder
    // to keep the mutex locked until asio is done sending.
    asio::async_write(stream_,
                      asio::const_buffers_1(response_.data(), response_.size()),
                      std::bind(&connection::response_sent, shared_from_this(),
                                _1, _2, std::move(locker))
                      );
}

void connection::response_sent(const boost::system::error_code& err, std::size_t len)
{
    if (err) handle_error(err);
    // the mutex is unlocked when the binder is destroyed
}
Run Code Online (Sandbox Code Playgroud)

但是,这无法编译,因为boost::asio需要处理程序是CopyConstructible. …

c++ boost boost-asio move-semantics c++11

17
推荐指数
1
解决办法
1929
查看次数

标签 统计

boost ×1

boost-asio ×1

c++ ×1

c++11 ×1

move-semantics ×1