我需要實現以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'字節是否可用。如果它們不是,則下一次讀取將與數據流不同步。 –