admin管理员组文章数量:1642199
如果建立tcp连接的套接字所在的线程是A,然后你通过B线程调用了这个已经建立连接的套接字,这种情况在Qt中会发现是write()函数返回发送的数据字节数量,但是接收端却收不到数据,并且导致已经连接的套接字不可以再发送数据了
调试过程在输出窗口会看到提示:
QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
如果是使用udp通信,那么在另一线程调用套接字发送数据是不存在这种情况的
那么解决方式就是,将发送数据的过程转移到建立套接字连接的线程中
第一种:通过信号和槽连接的第五个参数,将执行发送的过程转移到正确发送的线程
第二种:直接将连接的QTcpSocket对象在子线程中创建
第三种:调用udpSocket->write()函数之后,再调用udpSocket->flush()这样也可以发送成功
另外在Qt通过信号槽传递字节数组时候最好使用QByteArray类型,而不要使用char*类型作为信号槽的传递参数,不然有时候会发现槽函数接收到的数据和信号发送的数据不一致
本文标签: notifiersSocketQSocketNotifierthreaddisabled
版权声明:本文标题:QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729317093a1195427.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论