2015-02-26 118 views
-2

我嘗試使用Qt庫和GUI程序讀取TCP端口。Qt TCP Socket讀取問題

的問題是,當我使用此代碼讀取插座:

QTcpSocket *a = new QTcpSocket(); 
a->connectToHost("127.0.0.1", 5000); 
a->read(data,LEN); 

它不工作,我需要把額外的功能:

a->waitForReadyRead(1) 

但這種功能減慢我的計劃,我使用pthread連續運行此代碼。我有一個問題,我如何加快我的程序,併成功讀取數據?

回答

0

您需要使用Qt事件循環並連接'data available'事件信號以便異步讀取套接字數據。在你的情況下連接語法可能看起來像這樣:

QObject::connect(s, &QTcpSocket::readyRead, yourReaderFunction); 

你的程序循環應包含事件處理函數QApplication::processEvents()一個電話,或者您可以使用內置的循環QApplication::exec()

的信號和槽機制是Qt的的核心功能,你需要了解,爲了與大多數Qt類的交互正確地使用它:

Signal and slot basics

Qt5 new signal and slot syntax

+0

我知道你是什​​麼意思,我用這種方式,但在一個線程中,我認爲我沒有訪問其餘程序的內存。 – ntosis

+0

另一個問題是,如果我讀取的數據運行得比進程快,並且連接事件信號未處於同步讀取狀態時,數據丟失了? – ntosis

+0

@ntosis你可能想編輯你的問題來顯示線程代碼。你只能從它創建的線程中訪問一個套接字(因爲無論你的靜音或其他主線程安全特性如何,Qt都會「斷言」),並且確保創建套接字並不重要在你認爲的線程中,有正確的事件循環和排隊連接的上下文。 –