【发布时间】:2013-03-19 11:39:31
【问题描述】:
我正在尝试理解 boost::asio 但有一些问题。在this example,如果我错了,请纠正我。
消息是通过引用 write() 方法和值给 do_write() 给出的。所以我觉得这样就ok了,虽然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));
【问题讨论】:
标签: c++ boost boost-asio