Qt TCP 套接字读取问题
Qt TCP Socket reading issue
我尝试使用 Qt 库和 GUI 程序读取 TCP 端口。
问题是当我使用这段代码读取套接字时:
QTcpSocket *a = new QTcpSocket();
a->connectToHost("127.0.0.1", 5000);
a->read(data,LEN);
它不起作用,我需要添加一个额外的功能:
a->waitForReadyRead(1)
但是这个函数减慢了我的程序,我连续使用 pthread
到 运行 这个代码。我有一个问题,我怎样才能加快我的程序并成功读取数据?
您需要使用 Qt 事件循环并连接 'data available' 事件信号才能异步读取套接字数据。您的连接语法可能如下所示:
QObject::connect(s, &QTcpSocket::readyRead, yourReaderFunction);
您的程序循环应包含对事件处理函数的调用 QApplication::processEvents()
,或者您可以使用内置循环 QApplication::exec()
。
信号和槽机制是Qt的核心特性,您需要理解并正确使用它才能与Qt的大部分交互类:
我尝试使用 Qt 库和 GUI 程序读取 TCP 端口。
问题是当我使用这段代码读取套接字时:
QTcpSocket *a = new QTcpSocket();
a->connectToHost("127.0.0.1", 5000);
a->read(data,LEN);
它不起作用,我需要添加一个额外的功能:
a->waitForReadyRead(1)
但是这个函数减慢了我的程序,我连续使用 pthread
到 运行 这个代码。我有一个问题,我怎样才能加快我的程序并成功读取数据?
您需要使用 Qt 事件循环并连接 'data available' 事件信号才能异步读取套接字数据。您的连接语法可能如下所示:
QObject::connect(s, &QTcpSocket::readyRead, yourReaderFunction);
您的程序循环应包含对事件处理函数的调用 QApplication::processEvents()
,或者您可以使用内置循环 QApplication::exec()
。
信号和槽机制是Qt的核心特性,您需要理解并正确使用它才能与Qt的大部分交互类: