前面的博文中,我们讲过QtConcurrent模块,该模块是Qt中实现并发编程的高级API接口,而QRunnable结合QThreadPoll和QThread都是Qt中与并发编程相关的低级接口。今天我们先来看QRunnable和QThreadPool。
QRunnable类在Qt中是所有可运行对象的基类,代表了由run()函数表示的一个任务或一段要执行的代码。我们一般使用该类和QThreadPool来在另一个独立的线程中执行该代码。并且,如果QRunnable对象的autoDelete()设为true的话,QThreadPool会在run()运行结束后自动删除该对象。
下面,我们写一个例子,来使用一下该类。
新建一个Qt控制台程序,然后写一个派生自QRunnable的类,并重新实现其中的纯虚函数run()即可。
#ifndef RUNNABLE_H
#define RUNNABLE_H
#include <QRunnable>
class Runnable : public QRunnable
{
public:
Runnable();
void run();
};
#endif // RUNNABLE_H
#include "runnable.h"
#include <QDebug>
#include <QThread>
Runnable::Runnable()
{
}
void Runnable::run()
{
qDebug() << "child thread id: " << QThread::currentThreadId();
int i = 10;
while(i--)
{
qDebug() << QString("hell