QT:使用线程池 QThreadPool 与 QRunnable

在使用QT编写ReaEdge雷达文件下载客户端时,需要用到多个子线程下载文件。故使用到QThreadpool。主要使用步骤如下

定义线程任务

线程池的执行任务对象,是继承QRunnable的子类,执行内容为重写后的run方法。可以通过设置是否运行结束后自动释放。需要使用信号槽的时候,同时需要先继承QObject,后继承QRunnable

/*MyRunable.h*/
#include 
class MyRunnable : public QObject,  public QRunnable {
    Q_OBJECT
public:
   MyRunnable();
   ~MyRunnable();
protected:
   void run();
/*MyRunable.cpp*/
MyRunnable::MyRunnable(){
    this->setAutoDelete(true);
}
void MyRunnable::run(){
    /*task code*/
}

定义线程池

QT可使用全局线程池或局部线程池
使用局部线程方法如下:

#include 
QThreadPool *pool = new QThreadPool;
pool->setMaxThreadCount(10);

添加任务

pool->start(new MyRunnable());

若需要全局线程池,可以调用静态函数:

QThreadPool::globalInstance()
``

你可能感兴趣的:(qt,c,c++)