2014-03-30 97 views
1

我有一个QTcpSocket,它与GUI有不同的线程。
当通过连接到某个插槽使用readyRead()信号时,情况奏效。
但是,当我不使用它,并遇到一个条件控制while(conditionControlVar)msleep()里面,bytesAvailable()总是返回0.
和是的,我的套接字是在我读的同一个线程。从QTcpSocket中读取而不使用readyRead()信号

//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

您可以使用waitForReadyRead(int msecs)阻断,直到新的数据可用于阅读和readyRead()信号已经发出。该函数在msecs毫秒后超时;默认超时时间为30000毫秒。如果有新数据可供阅读,则返回true;否则返回false。所以它可以是这样的:

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

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

+0

@Anjanu它解决了你的问题吗? – Nejat

相关问题