前端开发主要做什么seo怎么做?
以下是 QtConcurrent
的一些常见用法示例:
QtConcurrent::run
QtConcurrent::run
是最常用的函数,用于在单独的线程中运行一个函数。
运行普通函数
#include <QtConcurrent>
#include <QDebug>
#include <QThread>void myFunction()
{qDebug() << "Running in thread:" << QThread::currentThreadId();
}int main()
{QFuture<void> future = QtConcurrent::run(myFunction);future.waitForFinished(); // 等待线程完成return 0;
}
运行带参数的函数
#include <QtConcurrent>
#include <QDebug>
#include <QThread>void myFunctionWithArgs(int arg1, const QString &arg2)
{qDebug() << "Running in thread:" << QThread::currentThreadId();qDebug() << "Arguments:" << arg1 << arg2;
}int main()
{int arg1 = 42;QString arg2 = "Hello, world!";QFuture<void> future = QtConcurrent::run(myFunctionWithArgs, arg1, arg2);future.waitForFinished();return 0;
}
运行成员函数
#include <QtConcurrent>
#include <QDebug>
#include <QThread>class MyClass
{
public:void myMemberFunction(){qDebug() << "Running in thread:" << QThread::currentThreadId();}
};int main()
{MyClass obj;QFuture<void> future = QtConcurrent::run(&obj, &MyClass::myMemberFunction);future.waitForFinished();return 0;
}
使用线程池
#include <QtConcurrent>
#include <QDebug>
#include <QThread>
#include <QThreadPool>void myFunction()
{qDebug() << "Running in thread:" << QThread::currentThreadId();
}int main()
{QThreadPool pool;pool.setMaxThreadCount(4); // 设置线程池的最大线程数QFuture<void> future = QtConcurrent::run(&pool, myFunction);future.waitForFinished();return 0;
}
QtConcurrent::map
QtConcurrent::map
函数用于对一个序列中的每个元素执行相同的函数。
非阻塞版本
#include <QtConcurrent>
#include <QDebug>
#include <QList>void myFunction(int &value)
{value *= 2; // 对每个元素进行操作
}int main()
{QList<int> list = {1, 2, 3, 4, 5};QFuture<void> future = QtConcurrent::map(list, myFunction);future.waitForFinished(); // 等待所有元素处理完成for (int value : list){qDebug() << value;}return 0;
}
阻塞版本
#include <QtConcurrent>
#include <QDebug>
#include <QList>void myFunction(int &value)
{value *= 2;
}int main()
{QList<int> list = {1, 2, 3, 4, 5};QtConcurrent::blockingMap(list, myFunction);for (int value : list){qDebug() << value;}return 0;
}
QtConcurrent::mapped
QtConcurrent::mapped
函数与 QtConcurrent::map
类似,但它会返回一个新的序列,包含对每个元素执行函数后的结果。
非阻塞版本
#include <QtConcurrent>
#include <QDebug>
#include <QList>int myFunction(int value)
{return value * 2;
}int main()
{QList<int> list = {1, 2, 3, 4, 5};QFuture<QList<int>> future = QtConcurrent::mapped(list, myFunction);QList<int> result = future.result(); // 获取结果for (int value : result){qDebug() << value;}return 0;
}
阻塞版本
#include <QtConcurrent>
#include <QDebug>
#include <QList>int myFunction(int value)
{return value * 2;
}int main()
{QList<int> list = {1, 2, 3, 4, 5};QList<int> result = QtConcurrent::blockingMapped(list, myFunction);for (int value : result){qDebug() << value;}return 0;
}
QtConcurrent::mappedReduced
QtConcurrent::mappedReduced
函数将 mapped
和 reduce
操作结合起来,先对序列中的每个元素执行函数,然后将结果合并为一个单一的结果。
#include <QtConcurrent>
#include <QDebug>
#include <QList>int myFunction(int value)
{return value * 2;
}int reduceFunction(int sum, int value)
{return sum + value;
}int main()
{QList<int> list = {1, 2, 3, 4, 5};QFuture<int> future = QtConcurrent::mappedReduced(list, myFunction, reduceFunction);int result = future.result(); // 获取最终结果qDebug() << "Result:" << result;return 0;
}
使用 QFutureWatcher
QFutureWatcher
可以用来监视 QFuture
的状态,并在任务完成时发出信号。
#include <QtConcurrent>
#include <QFutureWatcher>
#include <QDebug>
#include <QThread>void myFunction()
{qDebug() << "Running in thread:" << QThread::currentThreadId();
}int main()
{QFutureWatcher<void> watcher;QObject::connect(&watcher, &QFutureWatcher<void>::finished, [](){qDebug() << "Task finished";});QFuture<void> future = QtConcurrent::run(myFunction);watcher.setFuture(future);// 主线程可以继续执行其他任务qDebug() << "Main thread continues to run";return 0;
}