我需要实现以300 Hz(每秒300个采样)读取数据的客户端。当使用C套接字时,一切都可以接受,因为我需要运行一个连续的while循环来从服务器获取数据(阻止客户端处理其他任何事情)。 所以,我决定尝试移动到QTcpsocket,以处理来自其他对象到客户端对象的信号。但是,当我连接与QTcpSocket,并连接信号读取使用QTcpSocket持续快速使用
connect(socket,&QTcpSocket::readyRead, this, &client::handleReadyRead, Qt::ConnectionType::QueuedConnection);
这是我的处理程序 -
QByteArray b = socket->read(12);
int packetLength = (unsigned char)b[6] << CHAR_BIT;
packetLength |= (unsigned char)b[7];
b = socket->read(packetLength);
(我得到每包12字节长头) 现在我得到一个非常慢速客户端 - 它每秒处理大概3个样本......我检查了看有多少bytesavailable()
返回,并且它看起来像数据堆积在套接字缓冲区中。 我在做什么错?我必须得到一个非常快速的客户,但我不确定我阅读的方式是最佳的。 有没有更有效的方法来做到这一点?
谢谢
配置您的应用程序,看看瓶颈在哪里。 –
我实际上使用一个小型项目来测试它,所以它几乎只是客户端运行。分析表明,事件循环需要很长时间,但可以避免吗? – JLev
您正在调用'socket-> read(packetLength)'而不知道'packetLength'字节是否可用。如果它们不是,则下一次读取将与数据流不同步。 –