一.前言
软件开发中,使用到线程就不可避免的要实现线程的暂停恢复停止等操作,总不可能说线程一旦启动就直接运行到结束了,中途不能停止啥的。线程的开始以及结束都比较简单,都有对应的接口可以调用,线程的暂停以及恢复就需要自己手动写个接口,关键在于使用线程锁来实现这个过程。
二.实现过程
1.1先继承QThread实现自己的线程类,声明线程锁变量,以及暂停恢复停止的接口
1.2核心代码(.h)

/** 线程开始 暂停 恢复 停止 例程* V1.0 2021-12-27
*/#ifndef THREAD3_H
#define THREAD3_H#include <QObject>
#include <QThread>
#include <QDebug>
#include <QTime>
#include <QCoreApplication>
#include <QMutex>class Thread3 : public QThread
{public:Thread3();~Thread3(){}public:void close();void pauseThread();void resumeThread();protected:void run();private:volatile bool stop_;bool pause_;QMutex pauseLock;int i;
};#endif // THREAD3_H

1.3其他说明
增加关键字volatile是为了:提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,就会出现不一致的现象

2.cpp核心代码

#include "Thread3.h"Thread3::Thread3()
{stop=false;pause=false;i=0;
}void Thread3::close()
{stop=true;quit();wait();
}void Thread3::pauseThread()
{qDebug()<<"pauseThread";this->pauseLock.lock();pause=true;
}void Thread3::resumeThread()
{qDebug()<<"resumeThread";this->pauseLock.unlock();pause=false;
}void Thread3::run()
{while(i<10){if(!stop){// 线程锁在业务开始和和结束的地方pauseLock.lock();// 具体的业务逻辑i++;qDebug()<<i<<"-"<<QTime::currentTime()<<"-"<<"CurrnetThreadID:"<<QThread::currentThreadId();msleep(1000);//pauseLock.unlock();}else{break;}}
}

3.1调用核心代码

void Widget::on_pushButton_1_clicked()
{qDebug()<<"线程开始";thread->start();
}void Widget::on_pushButton_2_clicked()
{qDebug()<<"线程暂停";thread->pauseThread();
}void Widget::on_pushButton_3_clicked()
{qDebug()<<"线程恢复";thread->resumeThread();
}void Widget::on_pushButton_4_clicked()
{qDebug()<<"线程停止";thread->close();
}

3.2效果预览

三.其他
1.本文只是简单实现线程的开始暂停恢复以及停止功能,但是实际运用过程中,还需要增加诸多的逻辑处理,比如暂停之前判断线程的状态再执行,恢复之前判断线程的状态再执行恢复等
2.源码下载链接

Qt之线程的开始暂停恢复停止相关推荐

  1. c#语言窗体运行暂停指令,C#线程启动、暂停、恢复、停止怎么实现

    论坛的高手你们好,本人是一个菜鸟,肯请大家帮个忙实现如下功能: 首先窗体界面如下: 怎么实现"start"启动线程."pause"暂停线程."resu ...

  2. python 实现线程的暂停, 恢复, 退出详解及实例

    Python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后 ...

  3. python暂停和恢复_python-线程的暂停, 恢复, 退出

    我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...

  4. Python关于Threading暂停恢复解决办法

    我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...

  5. python下载文件暂停恢复_Python关于Threading暂停恢复解决办法

    我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...

  6. gdb - 暂停/恢复程序执行

    GDB - 暂停/恢复程序执行 在使用GDB调试程序的时候,经常需要暂停程序,以查看程序执行情况和上下文.GDB 提供了多种暂停程序的方式,包括 break point, watch point, c ...

  7. python线程启动和暂停_threading之线程的开始,暂停和退出

    背景 利用多线程实现一个开关功能,需要对产生的线程进行管理(例如:开启,暂停,关闭等操作). 实现代码 任务脚本: #!/usr/bin/python3 # _*_ coding: utf-8 _*_ ...

  8. mysql binlog线程恢复_使用MySQL SQL线程回放Binlog实现恢复

    [toc] 1. 需求部分 1.1 基于MySQL复制同步特性,尝试使用Replication的SQL线程来回放binlog,可基于以下逻辑模拟场景 做全量xtrabackup备份模拟日常备份 执行s ...

  9. 线程的启动暂停和终止

    线程的启动暂停和终止,听起来很简单,不过经常有初学者在这个问题上卡住,经常是启动了,能暂停,但再要启动就不行了,其实这个问题比较容易解决,思路也很简单,就是在启动线程的时候用一个判断语句锁定整个run ...

最新文章

  1. 百度CTO王海峰博鳌解读AI“融合创新”,算力算法数据发挥综合作用
  2. mysql 求数据的长度_mysql 如何求数据的长度
  3. WINCE6.0深入理解TOC
  4. Luogu P1160 【队列安排】
  5. Json格式的netconf转成NormalizedNode
  6. Lingoes 2.8 手动去广告步骤
  7. GridCtrl学习笔记(2)寻找自动更新表格的最新数据并把其显示到当前窗口的方法...
  8. 工作119:axios请求封装
  9. 【随记】SQL Server连接字符串参数说明
  10. python异步asy_Python 异步编程之asyncio【转载】
  11. 后端技术栈入职培训感悟
  12. [转]30个自我提升技巧
  13. Deepin添加PPA显示没有公钥签名
  14. 中英文对照 —— 软件与病毒、电子与硬件
  15. springboot之idea不合并空包
  16. IFC标准是什么标准?IFC标准的发展历程是怎样的?
  17. 【浙大翁恺】C语言习题
  18. 机电传动与控制【2】
  19. [百度空间] [转]内存屏障 - MemoryBarrier
  20. 【网络】Select服务器的实现

热门文章

  1. Matrix矩阵的基础案例与分析
  2. 日历提醒mysql数据_mysql数据从日历检查,如果预订
  3. 环信即时通信jdk,java版本服务器端的集成
  4. sysstat工具简介
  5. Pytorch 创建Tensor
  6. tdk怎么设置_TDK设置常见问题
  7. “程序员薪资低,90%输在了选择上!”CTO:多数程序员都是瞎努力!
  8. 百度上传插件 Web Uploader 使用之单图片上传
  9. MATLAB图像处理——小波变换
  10. UE4-分析自带虚拟摇杆TICK函数