在使用QT编写ReaEdge雷达文件下载客户端时,需要用到多个子线程下载文件。故使用到QThreadpool。主要使用步骤如下
定义线程任务
线程池的执行任务对象,是继承QRunnable的子类,执行内容为重写后的run方法。可以通过设置是否运行结束后自动释放。需要使用信号槽的时候,同时需要先继承QObject,后继承QRunnable
/*MyRunable.h*/
#include <QRunnable>
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>
QThreadPool *pool = new QThreadPool;
pool->setMaxThreadCount(10);
添加任务
pool->start(new MyRunnable());
若需要全局线程池,可以调用静态函数:
QThreadPool::globalInstance()
``
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。