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]LeetCode968.监控二叉树 | Binary Tree Cameras
Given a binary tree, we install cameras on the nodes of the tree. Each camera at a node can monitor ...
- CentOS7Linux中自动化运维工具Ansible的安装,以及通过模块批量管理多台主机
使用自动化运维工具Ansible集中化管理服务器 Ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet ...
- mongo 删除 表中字段
查询语句 db.getCollection("A表").update( { } ,{ $unset:{"a":1} } , {multi: true} ) ...
- 利用U盘安装win2008r2系统的步骤
我们在公司或者家里,经常要安装各种系统,最近公司需要重新安装win2008r2系统.折腾了一天的时间,终于把系统装好了.将安装的步骤记录下来,方便大家查看,自己也做个记录. 1 准备win2008r2 ...
- 使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)
本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文 ...
- Python内置函数(20)——exec
英文文档: exec(object[, globals[, locals]]) This function supports dynamic execution of Python code. obj ...
- JVM基础系列第4讲:从源代码到机器码,发生了什么?
在上篇文章我们聊到,无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外.那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的. 如下图所示,编译器可 ...
- Spring Boot 集成 Hystrix
续: <Hystrix介绍> <Hystrix是如何工作的> <SpringCloud学习笔记(3)——Hystrix> Hystrix使用 package com ...
- replugin插件化,插件转场动画失效的问题解决
说明 随着应用功能的丰富,Android程序的安装包也逐渐变大,这成为应用程序现有框架下难以摆脱的瓶颈.所以引入了rePlugin插件化框架,将应用按功能拆分为插件,以此减小apk的大小并同时增加应用 ...
- python:pip命令使用
pip命令安装库 pip install 库名 使用pip命令更新库 pip install --upgrade 库名 比如更新scikit-learn包 pip install --upgrade ...