是的。我知道boost::asio
这个time_out
有一些问题。我的问题可能太简单了,asio
家伙要在这里解决。boost:asio :: read或boost:asio :: async_read超时
我正在使用TCP协议上的boost::asio
以尽可能快的速度通过网络在网络中连续读取数据。
以下函数ReadData()
在while循环中从工作人员std::thread
不断调用。
std::size_t ReadData(std::vector<unsigned char> & buffer, unsigned int size_to_read) {
boost::system::error_code error_code;
buffer.resize(size_to_read);
// Receive body
std::size_t bytes_read = boost::asio::read(*m_socket, boost::asio::buffer(buffer), error_code);
if (bytes_read == 0) {
// log error
return;
}
return bytes_read;
}
它工作正常。返回数据。一切都很好。
所有我想要的,是使用TIME_OUT为boost::asio::read
。我了解到,我需要使用boost::asio::async_read
和boost::asio::async_wait
以使time_out技术起作用。
其中一个boost example建议使用boost::asio::async_read_until
?
我应该用boost::asio::async_read
还是boost::asio::async_read_until
?
无论我使用的是boost::asio::async_read
还是boost::asio::async_read_until
或boost::asio::read
。但我希望在调用我的方法ReadData
时完成asio::read
调用&,以便客户端代码不受影响。
我该如何做到这一点?请建议
你知道你可以用'插座::取消()'取消异步操作,对吧? –
是的。我知道如果达到time_out,我应该取消套接字。但是,我如何在异步阅读中首先使用time_out? –
@ TheQuantumPhysicist。套接字:: cancel()会在同步读操作上工作吗? –