一.前言
软件开发中,使用到线程就不可避免的要实现线程的暂停恢复停止等操作,总不可能说线程一旦启动就直接运行到结束了,中途不能停止啥的。线程的开始以及结束都比较简单,都有对应的接口可以调用,线程的暂停以及恢复就需要自己手动写个接口,关键在于使用线程锁来实现这个过程。
二.实现过程
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.源码下载链接