操作对提升asnyn_read的影响
Effect of operations on boost asio asnyn_read
我有以下代码段从设备读取数据:
void handle_read(const boost::system::error_code& ec, std::size_t n) {
std::cout << "handle_read: " << ec << " " << n << "n";
if (!ec) {
std::istream stream(&buf);
while(!stream.eof()) {
char c[4096];
stream.read(c, 4096); //....(1)
std::cout << "stream size: " << stream.gcount() << "n";
std::cout << std::hex << (0xFF & (unsigned char) c[0]) << " " << //....(2)
(0xFF & (unsigned char) c[1]) << " " <<
(0xFF & (unsigned char) c[2]) << " " <<
(0xFF & (unsigned char) c[3]) << "n";
}
//Continue reading remaining data until EOF.
boost::asio::async_read(*tcp_socket, buf,
boost::asio::transfer_at_least(1),
boost::bind(&Connection::handle_read, this,
boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
如果没有(1)
和(2)
,每个周期读取的字节数约为1440。随着我不断添加步骤,n
分别减少到 512 和 200。
istream.read()
和std::cout
对async_read
读取的字节数有什么影响?有什么办法可以避免这种情况吗?
by
std::cout << std::hex
您已更改数字的基数。
因此,只有在第一次处理程序调用时,您才会以十进制 - 1440
打印读取字节数。在处理程序的第二次和下一次调用中,您将打印hex
基数中的读取字节值。您需要通过dec
操纵器将其显式地转回十进制。 所以512
十六进制是十进制1298
。我认为这个值接近 1440。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么擦除方法会影响结束方法
- 内联如何影响模块接口中的成员函数
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在容量内调整矢量大小时的性能影响
- 使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 未达到的情况会影响开关外壳性能
- 循环仅对第一行正常工作.其他行不受 for 的影响
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- write() 和 read() 中几乎没有混淆
- 模板如何影响C++中隐式声明的规则?
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 命名空间信息会影响C++的可读性
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 对同一文件使用 .read 的次数是否有限制?
- [[可能]]和[[不太可能]]影响程序汇编的简单示例?
- 如何保护非托管应用程序中的字符串不受进程转储的影响
- SELECT对linux中read()的影响