2013-08-12 146 views
1

目前在我的QT代碼,我有這樣的事情:阻斷插座 - waitForReadyRead()

QByteArray tick_stream; 
clntSocket->waitForReadyRead(); 
tick_stream = clntSocket->read(800); 

在文檔它規定

此功能塊,直到新的數據可用於閱讀和readyRead()信號已發出。該功能將在 msecs毫秒後超時;默認的超時時間爲30000毫秒

有沒有什麼辦法可以讓waitForReadyRead等到無窮遠,我阻止一個應用

+1

通過給出一個非常大的超時? –

回答

5

您可以使用-1作爲參數傳遞給無限期地等待。

clntSocket->waitForReadyRead(-1); 

這是在QIODevice的文檔中,但不是派生的套接字類。

真的,但是,你應該使用Qt事件循環並附加一個插槽到readyRead信號,而不是阻塞線程。

+0

如果是專用線程,阻塞應該沒問題 - 只有在阻塞時嘗試正確退出線程時,問題纔有可能。 –

+0

阻塞線程顯然沒有什麼技術上的錯誤,但它會更符合Qt設計模式來使用信號。您是否同意Qt設計模式是另一回事? :) – dunc123

+1

僅僅因爲你可以使用一個信號,那並不意味着你必須:)就像因爲有QObject一樣,你不必把所有東西都做成一個QObject(事實上,你不應該)。 –