QT tcp接收。每次接收到数据之后数据之后ReadyRead信号总是延时触发??

xundeng 2020-05-28 08:34:04
QT tcp接收。每次接收到数据之后数据之后readready信号总是延时触发??
去在ReadyRead()信号对应的槽函数中打印的时间和抓包工具抓包时间对比,发现ReadyRead()信号触发时间总要晚上1s到7、8秒不等。而接收到的数据越少,延时越长。怀疑是qt做了延时等等。 请问怎么去掉这个延时。
...全文
2377 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xundeng 2020-07-29
  • 打赏
  • 举报
回复
没有遇到你说的情况。 在线程的run函数中,设置一人周期函数,用于发送数据。然后直接调用用exec();进入线程的消息循环。 响应readyRead()信号用接收数据。 伪代码如下 void CThreadrun::run() { m_isrun = true; InitTimer(); exec(); m_isrun = false; } void CThreadrun::send_data() { if (!m_Comm.m_TcpC.m_isOpen) { OpenInit(); if (m_Comm.m_TcpC.m_isOpen) { connect(m_Comm.m_TcpC.m_p_Sock, SIGNAL(disconnected()), this, SLOT(client_disconnected()), Qt::DirectConnection); connect(m_Comm.m_TcpC.m_p_Sock, SIGNAL(readyRead()), this, SLOT(tcp_client_recv()), Qt::DirectConnection); } } else { //发送TCP数据 int nR = m_Comm.Send(m_Buf, nLen, COMM_TCP_CLIENT); } }
xiaocaiyigea 2020-07-16
  • 打赏
  • 举报
回复
麻烦问下 你那边有没有网卡接收到了数据但是客户端没接收到的情况?怎么解决的 挺急的 给个意见呗
xiaocaiyigea 2020-07-16
  • 打赏
  • 举报
回复
怎么解决的 能不能给个代码看一下
编程小鱼酱 2020-06-16
  • 打赏
  • 举报
回复
加个sleep
xundeng 2020-06-08
  • 打赏
  • 举报
回复
问题解决了, 是我把线程用错了。 线程的run()函数应该作为初始化用,最run()结束之前,应该使用exec()进行线程的消息循环。而我用的时候用了while(1)一直在run()接收信号未即时触发。
xundeng 2020-06-08
  • 打赏
  • 举报
回复
问题解决了, 是我把线程用错了。
浮一大白开水 2020-06-01
  • 打赏
  • 举报
回复
没有发现此现象,建议抓包看一下,和发送的数据大小、网络状态都相关。另外是使用的短连接方式还是长连接方式。线程中是不是存在其它阻塞的情况。是不是其它线程优先级高在处理大量数据导致,都需要考虑。
xundeng 2020-05-30
  • 打赏
  • 举报
回复
socket 是在线程里面接收数据的。在线程里面接收就会有延时,不用线程就没事。
xundeng 2020-05-29
  • 打赏
  • 举报
回复
经过测试,直接用readall()去读值,也要延时几秒之后才能读到,说明数据到了网卡,但是没有到Qsock的缓存区里面。
DreamLife. 2020-05-29
  • 打赏
  • 举报
回复
火速留名,等着看大神的解答,一直在用,却一直没有注意过

16,784

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧