我正在使用Boost::Asio
. 我必须跟踪每个客户端的数据包时间。当一个 IO 操作完成后,我可以使用GetQueuedCompletionStatus
. 我找不到用Boost::Asio
.
我该如何实现这一点或有其他选择吗?
我正在使用Boost::Asio
. 我必须跟踪每个客户端的数据包时间。当一个 IO 操作完成后,我可以使用GetQueuedCompletionStatus
. 我找不到用Boost::Asio
.
我该如何实现这一点或有其他选择吗?
我不确定我是否正确理解了您的问题:将所有与客户端相关的状态(套接字、地址等)存储在诸如asio async tcp 服务器示例中的会话类之类的类中有什么问题?然后,例如,您可以在调用async::write
操作时启动计时器
boost::asio::async_write(socket_,
boost::asio::buffer(data_, bytes_transferred),
boost::bind(&session::handle_write, this,
boost::asio::placeholders::error));
并在写入完成处理程序中停止计时器,一旦写入完成handle_write
,asio 将调用该计时器。
void handle_write(const boost::system::error_code& error)
或者,您可以轻松地使用boost::bind来保持状态。例如,如果您调用异步写入操作,您将指定通常具有类似于handle_write
带有一些附加参数的签名的处理程序,并将附加参数绑定到调用。
如果这不能回答您的问题,请为您的问题添加一些进一步的解释,以便有人可以更好地帮助您。