Qt之线程的开始暂停恢复停止(转)
一.前言
软件开发中,使用到线程就不可避免的要实现线程的暂停恢复停止等操作,总不可能说线程一旦启动就直接运行到结束了,中途不能停止啥的。线程的开始以及结束都比较简单,都有对应的接口可以调用,线程的暂停以及恢复就需要自己手动写个接口,关键在于使用线程锁来实现这个过程。
二.实现过程
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
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; } } }
三.其他
1.本文只是简单实现线程的开始暂停恢复以及停止功能,但是实际运用过程中,还需要增加诸多的逻辑处理,比如暂停之前判断线程的状态再执行,恢复之前判断线程的状态再执行恢复等
2.源码下载链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)