这个主要用于: 不需要处理线程同步的多线程程序
#include <QCoreApplication>
#include <QtConcurrent/QtConcurrentRun>
#include <QDebug>
void hello(const QString &name)
{
qDebug() << "Hello" << name << "from" << QThread::currentThread();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "Main Thread" << QThread::currentThread();
// 在一个单独的线程中调用 hello()
QFuture<void> f1 = QtConcurrent::run(hello, QString("Qter"));
QFuture<void> f2 = QtConcurrent::run(hello, QString("Pythoner"));
// 阻塞调用线程并等待计算完成,确保所有结果可用
f1.waitForFinished();
f2.waitForFinished();
}
输出结果:
Main Thread QThread(0x398fc0) Hello “Qter” from QThread(0x39c240, name = “Thread (pooled)”) Hello “Pythoner” from QThread(0x39c280, name = “Thread (pooled)”)
注意:
QtConcurrent对PyQt5和PySide2是完全没有用的,因为QtConcurrent是一个名称空间,而不是一个类。
PyQt5和PySide2都不提供QtConcurrent提供的任何功能,因为它们都是基于模板的,因此无法包装。
PS:链接到的PySide文档适用于ReduceOption枚举。
由于怀疑该枚举是否在QtConcurrent命名空间之外有任何用途,因此PySide包含它可能是一个错误。