在不使用readyRead()信号的情况下从QTcpSocket读取

时间:2014-03-30 15:46:26

标签: c++ qt qtcpsocket

我有一个QTcpSocket与GUI不同的线程。
当通过将readyRead()信号连接到某个插槽时使用while(conditionControlVar)信号,一切正常。
但是当我不使用时并且遇到msleep()条件控制bytesAvailable()//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 } } } 总是返回0。是的,我的套接字位于我正在阅读的同一个帖子中。

{{1}}

1 个答案:

答案 0 :(得分:0)

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

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

套接字也应该与startReading()线程在同一个线程中。

相关问题