目的
我们可以使用QWebSocket得异步通信来高效传输数据,当时我们使用QWebSocket来和服务端取得视频信息流,而渲染也使用同样得界面线程,大量得包流通并且要渲染多个画面,这使得通信包来不及接收,这样,QWebSocket要使用不同得线程来接收数据包,和渲染分开,所以可以使用多个线程来将QWebSocket得异步通信放入到某个线程中,这里比较核心的是,将几个QWebSocke 放到同一个线程执行,这其实就是线程池技术。我们的示例是将两个QWebSocket放到一个线程中,学会了处理,自己稍加修改就可以做出像样的线程池了。
qt 多线程websocketQt有两种多线程的方法,其中一种是继承QThread的run函数, 另外一种是把一个继承于QObject的类用moveToThread函数转移到一个Thread里。 Qt4.8之前都是使用继承QThread的run这种方法,Qt4.8之后,Qt官方建议使用第二种方法。
具体的使用步骤如下:
1.从QObject派生一个类,将耗时的工作写在该类的槽函数中。
2.将派生类对象移动到一个QThread中,该线程需要start。(这一步使用moveToThread)
3.通过信号连接派生类的槽函数,并通过信号触发槽函数。(槽函数在子线程中执行)
#ifndef WORKER_H
#define WORKER_H
#include
#include
#include
#include
class Worker:public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent=0);
~Worker();
signals:
void sig_finish();
public slots:
void slot_dowork();
};
#endif // WORKER_H
#include "worker.h"
Worker::Worker(QObject *parent):QObject(parent)
{
qDebug()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?