Qt多线程应用--QRunnable

Qt多线程应用--QRunnable

QT线程池的使用:QThreadPool类和QRunnable类

【Qt】多线程QRunnable

Qt线程之QRunnable的使用详解

QT线程池的使用:QThreadPool类和QRunnable类

  QT线程池的使用:QThreadPool类和QRunnable类_我不是萧海哇~~~~的博客-CSDN博客

【Qt】多线程QRunnable

======================================

Qt线程之QRunnable的使用详解

  https://blog.csdn.net/luoyayun361/article/details/97116972

【Qt】多线程QRunnable

用法

要使用QRunnable创建线程,步骤如下:

    继承QRunnable。和QThread使用一样,首先需要将你的线程类继承于QRunnable。
    重写run函数。还是和QThread一样,需要重写run函数,run是一个纯虚函数,必须重写。
    使用QThreadPool启动线程。

和QThread的区别

与外界通信方式不同。由于QThread是继承于QObject的,所以可以在线程类中使用信号槽,但QRunnable没有继承于QObject,所以不能使用信号与槽。

启动线程方式不同。QThread线程可以直接调用start()函数启动,而QRunnable线程需要借助QThreadPool进行启动。

资源管理不同。QThread线程对象需要手动去管理删除和释放,而QRunnable则会在QThreadPool调用完成后自动释放。
————————————————
版权声明:本文为CSDN博主「heater404」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhudaokuan/article/details/130988994

Qt多线程应用--QRunnable

作为Qt类中少有的基类, QRunnable提供了简洁有效的可运行对象的创建.  用QRunnable来创建独立的运行对象来运行 不涉及界面元素的数据处理过程 非常合适.

 
优点: 创建过程简洁, 使用方便, 配合着自身的autoDelete特性, 有点“招之即来, 挥之即去”的感觉.

缺点: 无法实时提供自身的运行状态.

举个处理过程中反馈进度的例子

main.cpp

    #include <QApplication>  
    #include <QProgressBar>  
    #include <QThreadPool>  
      
    #include "runnableInst.h"  
      
    int main(int argc, char *argv[])  
    {  
        QApplication app(argc, argv);  
          
        QProgressBar progressBar;  
        progressBar.setValue(50);  
        progressBar.show();  
      
        runnableInst* hInst = new runnableInst(&progressBar);  
        QThreadPool::globalInstance()->start(hInst);  
      
        return app.exec();  
    }  

runnableInst.h

    #ifndef RUNNABLEINST_H  
    #define RUNNABLEINST_H  
      
    #include <QRunnable>  
      
    class QProgressBar;  
    class runnableInst : public QRunnable  
    {  
    public:  
        runnableInst(QProgressBar* progressBar);  
        virtual ~runnableInst();  
      
        void run();  
      
    private:  
        QProgressBar* m_ProgressBar;  
    };  
      
    #endif // RUNNABLEINST_H  

runnableInst.cpp

    #include "runnableInst.h"  
    #include <QTest>  
    #include <QProgressBar>  
      
    runnableInst::runnableInst(QProgressBar* progressBar)  
    : QRunnable(), m_ProgressBar(progressBar)  
    {  
    }  
      
    runnableInst::~runnableInst()  
    {  
      
    }  
      
    void runnableInst::run()  
    {  
        for(int step = 1; step <= 100; step++)  
        {  
            // 处理数据过程  
            //...  
      
            // 这两句只是测试用, 针对不同的环境可采用相应的进度反馈  
            QMetaObject::invokeMethod(m_ProgressBar, "setValue", Q_ARG(int, step));  
            QTest::qSleep(100);  
      
            //...  
        }  
    }  

当QRunnable运行结束, 它自身会被销毁, 所以用不着担心内存泄露(除了指定设置setAutoDelete(false)); 不过要注意在数据或事件对象的处理~` 好比例子中QMetaObject::invokeMethod是比较危险的事!

  https://www.cnblogs.com/lvdongjie/p/3758146.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值