我有一个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}}
答案 0 :(得分:0)
您可以使用waitForReadyRead(int msecs)
阻止,直到有新数据可供读取并且已发出readyRead()
信号。该函数将在msecs毫秒后超时;默认超时为30000毫秒。如果有可供读取的新数据,则返回true;否则返回false。所以它可以像:
void startReading()
{
while(conditionVar)
{
if(socket->waitForReadyRead(50))
{
//Read Data
}
}
}
套接字也应该与startReading()
线程在同一个线程中。