QLocalSocket/QDataStream应该怎么读?
我有一个程序通过命名管道使用QLocalSocketand与另一个程序通信QDataStream。下面的recieveMessage()插槽连接到QLocalSocket'sreadyRead()信号。
void MySceneClient::receiveMessage()
{
qint32 msglength;
(*m_stream) >> msglength;
char* msgdata = new char[msglength];
int read = 0;
while (read < msglength) {
read += m_stream->readRawData(&msgdata[read], msglength - read);
}
...
}
我发现应用程序有时会挂起readRawData()。也就是说,它成功读取了 4 字节的标头,但之后再也没有从readRawData().
如果我添加...
if (m_socket->bytesAvailable() < 5)
return;
...到此功能的开始,应用程序运行良好(带有简短的测试消息)。
我当时猜测(文档非常稀少)发生了某种死锁,我必须使用bytesAvailable()信号来逐渐建立缓冲区而不是阻塞。
为什么是这样?从 QLocalSocket 读取的正确方法是什么?