QT中ReadyRead()信号只触发一次问题解决

143 篇文章 646 订阅 ¥9.90 ¥99.00

1、发送端Write一次,那么接收方就会有新数据到达,ReadyRead()信号就会触发一次,这种说法是错误的。

2、发送方和接收方没有一 一对应关系,发送端Write()函数调用一次,假如这一次Write了较大数据(2M),那么接收方ReadyRead()信号往往会触发两次以上,反过来,如果发送方Write()函数被调用了两次或是以上,接收方的ReadyRead()信号也可能只调用一次。经过程序证明这是正确的。

3、摘自网友:文档明明说有新的数据来,ReadyRead()信号就会触发一次,其实,这里说新的数据来,不是说从发送端有新的数据来到你的机子,而是数据从你的Tcp/ip协议栈到达你的Qt应用程序,也就是系统io缓冲区到达Qt应用程序,数据从系统到达你的Qt应用程序一次,readyread信号就会触发一次。还有一个非常要注意的词就是“only once”,仅仅一次。什么意思呢?其实是这样的,第一次数据来的时候,触发一次readyread信号,但如果此时你的readyread槽函数还没有及时执行,而新的数据又来了而且来了很多次(在QTcpSocket缓存没有满的情况下,满的情况下系统不会再发数据给应用),那么,这些所有的都将会只再触发一次readyread信号。如果此时你的readyread槽函数执行了,那么这时候来的新的数据就会触发第三个readyread信号。也就是说,还没有响应的readyread信号最多只有两个。想想也是啊,如果我发送端一直发送数据,你的系统就一直将数据发送给你的应用,然后readyread信号一直触发,触发到成千上万个,那岂不是很傻的操作。

在写程序的过程中,我遇到的问题是:发送方发送了发送了两次数据&

  • 12
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值