当主线程在无限循环中运行时,用QTcpSocket::write写入的字节没有被服务器接收

Bytes written with QTcpSocket::write has not been received by server when Main Thread running in infinite loop?

本文关键字:字节 服务器 write 无限循环 线程 运行时 QTcpSocket      更新时间:2023-10-16

我正在开发一个与服务器交互的应用程序。

当启动时,它正在从数据库中加载一些数据,当数据库大小较大时,应用程序运行在一个很长的循环中,假设我在db中有10个lac记录,循环将迭代10 lac次。

经过一段固定的时间间隔(由用户设置),假设是1秒后,我的应用程序在不同的线程中向服务器发送心跳消息。

在正常情况下,它工作得很好,但是当应用程序在长循环中运行时,服务器没有收到心跳消息,尽管QTcpSocket::write()返回的写入字节与我正在写的相同(成功),但tcpDump没有显示收到的任何字节。

我用过

tcpSocket->setSocketOption(QAbstractSocket::LowDelayOption , 1); 
tcpSocket->setSocketOption(QAbstractSocket::KeepAliveOption , 600);

尝试在循环中添加processEvents()(假设每1000个周期或每100毫秒)以保持应用程序的响应。当然,如果您遇到这样的问题,这是糟糕设计的标志。考虑重新设计你的应用程序,使用多个线程,即主线程和工作线程的长操作(你的循环)。关于Qt上线程支持的更多信息可以在这里找到