Qt项目 实现对线程中执行流程的控制,支持开始、停止、暂停、继续

该博客介绍了一个使用VS2015+Qt5.9.8开发的线程执行控制器,实现了对线程执行流程的精细化控制,包括开始、停止、暂停和继续。Executor类封装了执行引擎和线程,通过信号槽机制处理执行状态变化。ExecutionEngine类则负责执行状态的设置和管理。项目源代码已上传至GitHub。
摘要由CSDN通过智能技术生成

简介

开发环境: vs2015 + Qt 5.9.8
主要特点: 实现对线程中执行流程的控制,支持开始、停止、暂停、继续

功能演示

功能演示

代码简述

Executor.h

将执行器封装为Executor类,主要成员如下:
executionEngine_:执行引擎,执行业务逻辑
executionThread_:执行引擎需要使用的线程

通过调用接口控制执行流程,接口如下:
startExecution:开始执行
stopExecution:停止执行
pauseExecution:暂停执行
continueExecution:继续执行

在执行状态发生变更时,执行器发出信号:signal_executionStatusChanged

class Executor : public QObject
{
    Q_OBJECT
public:
    explicit Executor(QObject *parent = nullptr);

signals:
    void signal_executionStatusChanged(ExecutionStatus status);

public:
    static Executor * getInstance();

public:
    void startExecution();
    void stopExecution();
    void pauseExecution();
    void continueExecution();

private:
    //执行引擎
    ExecutionEngine * executionEngine_;

    //执行线程
    QThread * executionThread_;

private:
    //实例
    static Executor * instance_;
    //实例 互斥锁
    static QMutex instanceMutex_;

private:
    //自动回收内存
    class Recycler
    {
    public:
        ~Recycler()
        {
            if (instance_ != nullptr)
            {
                delete instance_;
                instance_ = nullptr;
            }
        }
    };
    static Recycler recycler_;
};

Executor.cpp

创建线程和执行引擎,通过moveToThread的方式将执行引擎添加到执行线程内。

Executor::Executor(QObject *parent) : QObject(parent)
{
    executionEngine_ = new ExecutionEngine();

    connect(executionEngine_,&ExecutionEngine::signal_executionStatusChanged,this,&Executor::signal_executionStatusChanged);

    executionThread_ = new QThread(this);
    executionEngine_->moveToThread(executionThread_);
    connect(executionThread_,&QThread::destroyed,executionEngine_,&ExecutionEngine::deleteLater);
    executionThread_->start();
}

ExecutionEngine.h

将执行器封装为Executor类,主要成员如下:
status_:执行状态
pauseWaitCondition_:暂停等待条件

通过调用setExecutionStatus控制执行流程,参数如下:
ReadyRun:准备开始(执行引擎对ReadyRun状态进行响应后,状态更新为Running
ReadyPause:准备暂停(执行引擎对ReadyPause状态进行响应后,状态更新为Paused
ReadyStop:准备停止(执行引擎对ReadyStop状态进行响应后,状态更新为Stopped

在执行状态发生变更时,执行器发出信号:signal_executionStatusChanged

class ExecutionEngine : public QObject
{
    Q_OBJECT
public:
    explicit ExecutionEngine(QObject *parent = nullptr);
    ~ExecutionEngine();

signals:
    void signal_executionStatusChanged(ExecutionStatus status);

public slots:
    void execute();

public:
    ExecutionStatus getExecutionStatus();
    void setExecutionStatus(ExecutionStatus status);

private:
    //执行状态
    ExecutionStatus status_;
    //执行状态读写锁
    QReadWriteLock statusRWL_;

    //暂停
    QWaitCondition pauseWaitCondition_;
};

项目链接

github链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值