Qt之QTcpSocket 跨线程连续发送大数据
简述
最近在写有关网络传输的项目,使用了Qt封装的QTcpSocket,但是发现很多的跨线程导致死机的问题,也许是我了解的不够深入吧。最开始是自己继承一个线程然后把主线程创建的套接字传递到子线程并且在子线程中写入数据遇到程序崩溃;否决后是考虑到了跨线程访问的问题,QTcpSocket跨线程崩溃说明它只能是在哪个线程创建就只能在哪个线程使用,这样想的话只需要把特别耗时的处理(数据准备操作)放到一个子线程中,然后把待写入数据通过信号槽的形式传递给QTcpSocket所在线程(其实就是主线程)中然后调用QTcpSocket::write()发送,但是这就让主线程在写数据了,如果数据不是很大倒也可以,看个人情况而定;最后决定使用QObject::moveToThread()的方式,因为我要不间断的发送大量的数据所以在一个子线程中操作才是明智的选择,就是把在主线程创建好的QTcpSocket对象通过QObject::moveToThread()放到一个子线程中操作(也就相当于是在子线程创建的),后续的QTcpSocket与主线程之间的操作都是通过信号槽形式进行的。
测试
使用QObject::moveToThread()的测试样例:
方式一:子线程通过信号槽形式让主线程去写
点击连接时把各种信号槽关联上:
void MainWnd::on_pbConnect_clicked()
{// 客户端开始连接m_Socket.connectToHost(QH
Qt之QTcpSocket 跨线程连续发送大数据相关推荐
- Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)
TCP服务端的经典案例中有个例子,就是当收到TCP客户端连接后,线程池直接开一个线程然后把这个socket指针传到线程里面,依靠新开的线程进程业务处理. 但在Qt里面使用这个方式后,会报一个QTcpS ...
- Qt QTcpSocket 客户端设计(自动重连、多线程处理、发送大数据包、同步方式)
1.头文件 #ifndef TCPTOOL_H #define TCPTOOL_H#include <QObject> #include <QTcpSocket> #inclu ...
- Qt:解决跨线程调用socket/IO类,导致报错的问题(socket notifiers cannot be enabled from another thread)
Qt有很多IO相关的类,比如说QTcpSocket.QFile,总的来说,在Qt的框架内使用,还是非常方便的. 但是用过其他框架IO类的人,可能有一个很不习惯,就是Qt的所有IO类,都不推荐或者不可以 ...
- SHAREit X Databend | 跨多云 Data Mesh 大数据平台: Why, What and How
2022 年 10 月 22日,在 Data Infa 研究社第 5 期中,我们邀请到张韶全老师分享了<跨多云 Data Mesh 大数据平台:Why, What and How >受到大 ...
- qt定时连续发送udp数据包_TCP和UDP
首先强调一点,TCP/IP协议是一个协议簇.里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TCP.IP协议是两个很重要的协议,就用他两命名了. 两个协议的区别实际使用时 ...
- stm32 udp连续发送大量数据_TCP和UDP详解
本篇文章主要是从运输层协议概述.UDP.TCP.可靠传输的工作原理.TCP首部格式.TCP可靠传输的实现.TCP流量控制.TCP的拥塞控制.TCP的连接管理这几个方面进行解析. 一.运输层协议概述 1 ...
- 互联网跨界营销掘金“大数据”
在阿里巴巴投资优酷和新浪.腾讯入股京东和大众点评等战略部署时,不少人仅仅将这些举措看作是互联网的一次"站队行为",又或者解读为被投资的互联网企业需要资本支撑的.但是随着互联网巨头们 ...
- 跨职能流程图_大数据优化:跨职能集成是否关键?
跨职能流程图 Big data encompasses the collection, storage, and analysis of massive stores of information. ...
- 转型升级之路怎么走?山东这家枕头企业跨界建睡眠大数据
齐鲁网滨州8月12日讯(记者 于凡 滨州台 刘鹏)纺织服装业是山东的传统支柱产业,是全省工业5个过万亿行业之一.转型升级之路怎么走?山东企业在跨界融合方面做出了尝试. 私人订制枕头,一个能卖到3000 ...
- 浙江富润拟12亿并购泰一指尚 跨界互联网及大数据
浙江富润1月21日晚间发布重组预案,公司拟以7.51元/股非公开发行1.33亿股,并支付现金2.02亿元,合计作价12亿元收购泰一指尚100%股权;同时拟以7.51元/股非公开发行股份募集配套资金不超 ...
最新文章
- 好书推荐系列之:你在为谁工作
- quartus编译错误不支持芯片_硒鼓粉盒芯片不识别、耗材佘量错误、打印机亮红灯问题解决方法...
- js实现textarea根据内容大小自适应高度
- web 攻击靶机解题过程
- AFN2.0到3.0的迁移
- Shell函数:Shell函数返回值、删除函数、在终端调用函数
- SQL Server2005的连接和配置(入门)
- 网传不要升级.NET5的诸多原因,你赞同几个?
- codeforces gym-101741 Cover the Paths LCA、离线询问
- 关于scanf和cin的大数据读入效率
- [css] 过渡和动画的区别是什么?
- ssh端口转发(之kettle ssh方式连接数据库)
- 设计类超实用的导航网站,一网包含1000+个行业内热门资讯灵感源!
- UI设计教程 | 5步快速制作2.5D插画
- FreeRTOS历史版本更新记录
- python怎么写入聚类标签_标签传播算法(Label Propagation)及Python实现
- 推荐一个好组件Javascript文本比较工具
- 北京政协:电子垃圾回收是亟待破解的难题
- Win8.1RTM Pro电话激活
- 编程. 已知字符串:this is a test of java. 按要求执行以下操作: (1) 统计该字符串中字母s出现的次数 (2) 取出子字符串test (3) 用多种方式将本字