2014-03-30 442 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

相關問題