我试图理解 boost::asio 但有一些问题。在这个例子中,如果我错了,请纠正我。
消息通过引用 write() 方法和值给 do_write() 给出。所以我认为这没问题,即使 do_write 是由 io_service.post 完成的,boost::bind 也是按值绑定消息的。
但是为什么write_msgs_队列没有互斥锁,因为 std::deque 可能会移动或复制其元素,如果需要并且 io_service::run 有它自己的线程,则不能确保数据是一致的。
用指针来做不是更好吗?如果消息太长,则必须始终按值复制。但是使用 new 和 delete 它们将在发送之前创建并在发送之后删除。然后我会像这样发送
代码
boost::asio::async_write(socket_,
boost::asio::buffer(*write_msgs_.front().data(),
write_msgs_.front().length()),
boost::bind(&chat_client::handle_write, this,
boost::asio::placeholders::error));