2015-02-26 87 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都会“断言”),并且确保创建套接字并不重要在你认为的线程中,有正确的事件循环和排队连接的上下文。 –