从 QTcpSocket 读取而不使用 readyRead() 信号

Read from QTcpSocket without using readyRead() signal

本文关键字:readyRead 信号 QTcpSocket 读取      更新时间:2023-10-16

我有一个与GUI不同的线程中的QTcpSocket
当通过将信号连接到某个插槽来使用readyRead()信号时,事情可以正常工作。
但是当我不使用它并遇到内部有msleep()的条件控制while(conditionControlVar)时,bytesAvailable()总是返回 0。
是的,我的套接字与我正在阅读的线程相同。

//when connection with Server is established
startReading();
...
void startReading()
{
    while(conditionVar)
    {
        qDebug()<<"Bytes Avl:"<<socket.bytesAvailable(); //Always Zero
        if(bytesAvailable < 8)
            thread()->msleep(50);
        else
        {
            //Read Data
        }
    }
}

您可以使用waitForReadyRead(int msecs)阻止,直到有新数据可供读取并且发出readyRead()信号。该函数将在毫秒毫秒后超时;默认超时为 30000 毫秒。如果有新数据可供读取,则返回 true;否则返回 false。所以它可以像:

void startReading()
{
    while(conditionVar)
    { 
        if(socket->waitForReadyRead(50))
        {
            //Read Data
        }
    }
}

套接字也应与线程位于同一线程startReading()