C++ Qt TCP套接字读取问题

C++ Qt TCP套接字读取问题,c++,qt,tcp,qtcpsocket,C++,Qt,Tcp,Qtcpsocket,我尝试用Qt库和GUI程序读取TCP端口 问题是,当我使用此代码读取套接字时: QTcpSocket *a = new QTcpSocket(); a->connectToHost("127.0.0.1", 5000); a->read(data,LEN); 它不工作,我需要添加一个额外的功能: a->waitForReadyRead(1) 但是这个函数会减慢我的程序,我使用pthread来连续运行这个代码。我有一个问题,如何加快程序速度并成功读取数据?为了异步读取套接字数

我尝试用Qt库和GUI程序读取TCP端口

问题是,当我使用此代码读取套接字时:

QTcpSocket *a = new QTcpSocket();
a->connectToHost("127.0.0.1", 5000);
a->read(data,LEN);
它不工作,我需要添加一个额外的功能:

a->waitForReadyRead(1)

但是这个函数会减慢我的程序,我使用
pthread
来连续运行这个代码。我有一个问题,如何加快程序速度并成功读取数据?

为了异步读取套接字数据,需要使用Qt事件循环并连接“数据可用”事件信号。在您的情况下,连接语法可能如下所示:

QObject::connect(s, &QTcpSocket::readyRead, yourReaderFunction);
程序循环应该包含对事件处理函数的调用
QApplication::processEvents()
,或者可以使用内置循环
QApplication::exec()

信号和插槽机制是Qt的核心功能,您需要正确理解和使用它,以便与大多数Qt类交互:


我知道你的意思,我用这种方式,但在一个线程中,我认为我无法访问rest程序的内存。另外一个问题是,当读取速度快于进程,且连接事件信号不在线程中以进行同步时,我是否会丢失数据?@n如果您想编辑问题以显示线程,请单击此处代码。您只能从创建套接字的线程访问该套接字(因为Qt将断言,否则,不管您的互斥或其他自转线程安全功能如何),确保在您认为合适的线程中创建套接字是非常重要的,使用适当的事件循环和排队连接的上下文。@NicolasHolthaus我做了一些测试,它正在工作,我可以复制数据,但长时间后发出的信号readyRead,这非常糟糕。我想不是Qt写的,但我用的是Rtl_Tcp脚本,我觉得这个脚本很慢,或者是我这次无法想象的东西。@n这个问题已经远远超出了你原来问题的范围。如果你需要额外的帮助,我真的不能从你说的话中判断出来,但是如果需要,你可能需要问另一个问题,其中包括所有相关信息。