QT多线程的使用
今天给大家介绍三种QT里面使用多线程的方法
1、继承QThread并且重写run方法来实现多线程
#ifndef MYQTHREAD_H
#define MYQTHREAD_H
#include <QMutex>
#include <QThread>
class myQThread : public QThread
{
public:
myQThread()
{
_isRunning = false;
}
void run()
{
while(true)
{
_mutex.lock();
if(!_isRunning)
{
qDebug() << "myqthread" << QThread::currentThreadId();
}else
{
_mutex.unlock();
break;
}
_mutex.unlock();
QThread::msleep();
}
_isRunning = false;
}
void stop()
{
_mutex.lock();
_isRunning = true;
_mutex.unlock();
this->quit();
this->wait();
} volatile bool _isRunning;
QMutex _mutex;
}; #endif // MYQTHREAD_H
2、使用movetothread方法实现多线程,该类一定要继承QObject
#ifndef MYOBJECTTHREAD_H
#define MYOBJECTTHREAD_H #include <QObject> class myObjectThread : public QObject
{
Q_OBJECT
public:
explicit myObjectThread(QObject *parent = nullptr); signals: public slots:
void showID();
}; #endif // MYOBJECTTHREAD_H
3、使用c++11的thread来实现多线程
#ifndef MYC11THREAD_H
#define MYC11THREAD_H class myc11Thread
{
public:
myc11Thread(); void showc11ID(int i);
}; #endif // MYC11THREAD_H
4、来看一看这三种多线程如何使用
void showID(int i)
{
qDebug() << "全局函数的现成ID" << QThread::currentThreadId() << "i:" << i;
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//QThread重写runfangfa
tmpmyqthread = new myQThread();
tmpmyqthread->start(); //用movetothread,但是这个类要继承object
QThread *th = new QThread;
tmpmyobject = new myObjectThread();
//把tmpmyobject这个类的对象放到线程中
tmpmyobject->moveToThread(th);
//通过信号槽的方法,把槽函数运行在线程中
connect(th,SIGNAL(started()),tmpmyobject,SLOT(showID()));
th->start(); //C11原始的thread把全局函数初始化到线程
std::thread th1(showID,2);
th1.detach(); //C11原始thread把类的函数初始化到线程运行
tmpmyc11 = new myc11Thread();
std::thread th2(&myc11Thread::showc11ID,tmpmyc11,2);
th2.detach();
qDebug() << "mainThread:" << QThread::currentThreadId();
}
QT里面三种多线程介绍到这里
QT多线程的使用的更多相关文章
- Qt 多线程和网络编程学习
一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run( ...
- [转] Qt 多线程学习
Qt 多线程学习 转自:http://www.cnblogs.com/IT-BOY/p/3544220.html 最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ G ...
- QT多线程笔记
1.QT多线程涉及到主线程和子线程之间交互大量数据的时候,使用QThread并不方便,因为run()函数本身不能接受任何参数,因此只能通过信号和槽的交互来获取数据,如果只是单方面简单交互数据还过得去, ...
- Qt多线程-总结QThread-QThreadPool-QtConcurrent
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-总结QThread-QThreadPool-QtConcurrent 本文 ...
- Qt多线程-QtConcurrent并行运算高级API
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QtConcurrent并行运算高级API 本文地址:http://tec ...
- Qt多线程-QThreadPool线程池与QRunnable
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThreadPool线程池与QRunnable 本文地址:https:/ ...
- Qt多线程-QThread
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThread 本文地址:http://techieliang.com/2 ...
- Qt 多线程同步与通信
Qt 多线程同步与通信 1 多线程同步 Qt提供了以下几个类来完成这一点:QMutex.QMutexLocker.QSemphore.QWaitCondition. 当然可能还包含QReadWrite ...
- SeetaFaceQt:Qt多线程
为什么要做多线程,说个最简单的道理就是我们不希望在软件处理数据的时候界面处于无法响应的假死状态.有些处理是灰常花时间的,如果把这样的处理放到主线程中执行,就会导致软件一条路走到底,要等到处理完才能接收 ...
- 【QT】 Qt多线程的“那些事”
目录 一.前言 二.QThread源码浅析 2.1 QThread类的定义源码 2.2 QThread::start()源码 2.3 QThreadPrivate::start()源码 2.4 QTh ...
随机推荐
- [Swift]LeetCode376. 摆动序列 | Wiggle Subsequence
A sequence of numbers is called a wiggle sequence if the differences between successive numbers stri ...
- [Swift]LeetCode889. 根据前序和后序遍历构造二叉树 | Construct Binary Tree from Preorder and Postorder Traversal
Return any binary tree that matches the given preorder and postorder traversals. Values in the trave ...
- linux入门--Linux的应用领域
Linux 似乎在我们平时的生活中很少看到,那么它应用在哪些领域呢?其实,在生活中随时随地都有 Linux 为我们服务着. 网站服务器 用事实说话!访问国际知名的 Netcraft 网站 http:/ ...
- django中的跨表查询梳理
1.前言 最近在写一个小项目,里面主要涉及的就是表与表之间复杂的关系.当真正开发起来的时候,才发现自己对复杂的表关系间的查询有点混乱,趁着这几天的时间,重新梳理了一下. 2.概念 在开始之前,先明确几 ...
- 用CSS实现一个抽奖转盘
效果 基本是用CSS实现的,没有用图片,加一丢丢JS.完全没有考虑兼容性. 首先画一个转盘, <!DOCTYPE html> <html lang="en"> ...
- Android 普通通知栏新方法,现在需要创建通知渠道才可以
先看看效果看看是不是你想要的 点击后 话不多所,贴代码 xml文件: <?xml version="1.0" encoding="utf-8"?>& ...
- redis 系列8 数据结构之整数集合
一.概述 整数集合(intset)是集合键的底层实现之一, 当一个集合只包含整数值元素,并且这个集合元素数量不多时, Redis就会使用整数集合作为集合键的底层实现.下面创建一个只包含5个元素的集合键 ...
- 线段树(区间树)之区间染色和4n推导过程
前言 线段树(区间树)是什么呢?有了二叉树.二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色:正如它的名字而言,主要解决区间的问题 一.线段树说明 1.什么是线段树? 线段树首先是二叉树 ...
- 前端笔记之HTML5&CSS3(下)2D/3D转换&animate动画
一.2D转换(transform) CSS3中的transform转换和PS中的变换是一样的,分别有:缩放.位移.斜切.旋转 1.1 transform:scale()缩放 transform:sca ...
- 想在Java中实现Excel和Csv的导出吗?看这就对了
前言 最近在项目中遇到一个需求,需要后端提供一个下载Csv和Excel表格的接口.这个接口接收前端的查询参数,针对这些参数对数据库做查询操作.将查询到的结果生成Excel和Csv文件,再以字节流的形式 ...