1 简介
QRunnable 是 Qt 库中一个虚拟类,用于定义一个线程任务。它不是一个线程类,但是提供了一个 run() 函数,该函数是线程任务的主体,可以被 QThreadPool 子类执行。
QRunnable 的一个子类可以通过 QThreadPool::start() 方法提交给线程池,以便在线程池中的某个线程上执行 run() 函数。QRunnable 还提供了一个 autoDelete() 函数,用于设置线程任务完成后是否自动删除。
使用 QRunnable 可以很方便地管理多线程,而不需要手动创建和管理线程。同时,它还可以提高代码的可读性和可维护性,将线程任务与主程序分离开。
2 公共函数
bool autoDelete() const
返回QRunnable对象是否在任务结束后自动删除。
virtual void run() = 0
这是线程池中的任务执行函数。实现QRunnable的子类必须实现该函数以定义线程池中的任务。
void setAutoDelete(bool autoDelete)
设置QRunnable对象是否在任务结束后自动删除。
3 静态函数
QRunnable * create(std::function<void ()> functionToRun)
这个函数创建一个QRunnable对象,该对象代表要运行的函数functionToRun
#include <QThreadPool>
#include <QRunnable>
#include <functional>
class CalculationTask : public QRunnable
{
public:
CalculationTask(std::function<int ()> calculation)
: calculation(calculation)
{
}
void run() override
{
result = calculation();
}
int result;
std::function<int ()> calculation;
};
int main()
{
QThreadPool threadPool;
auto task = QRunnable::create([&] {
// Perform a calculation here
return 42;
});
threadPool.start(task);
threadPool.waitForDone();
auto result = qobject_cast<CalculationTask *>(task)->result;
return result;
}