资料来源:https://doc.qt.io/qt-5/qtconcurrentrun.html Concurrent Run的简介: QtConcurrent::run() 是开启单独一个线程来运行。返回值可以通过QFuture API来调取。 在单独的线程中运行: run()函数将在默认的QThreadPool 中单独一个线程来运行。可以通过QFuture和QFutureWatcher 类来查看此函数run()运行的状态。 可以专门开设线程池(pool),如下: run()函数中的参数传递: 当run函数运行的时候,这些参数将加载到线程中来运行, 函数值的返回: 值的返回是通过QFuture 来实现的: 有参数情况下: 注意: QFuture::result() 函数将阻塞,一直等到result结果出来。可以通过QFutureWatcher 来获取 执行完毕和计算结果的通知。 run函数的其他特性: QtConcurrent::run() 同样接受指向成员函数的指针。这样,run函数的第一个参数可以是指向常量的指针,或者指向一个类的对象。 如果传递是常量,通常是调入常量处理的函数指针。 例如:通过调入QByteArray::split() (a const member function) 在单独一个线程中处理: 调入Calling a non-const member 函数如下: 支持使用Lamdba 函数如下: 本篇翻译完毕! 有关并行计算的应用,请看Qt并行计算圆周率示例
QtConcurrent::run();extern void aFunction(); QFuture<void> future = QtConcurrent::run(aFunction);
extern void aFunction(); QThreadPool pool; QFuture<void> future = QtConcurrent::run(&pool, aFunction);
例如:extern void aFunctionWithArguments(int arg1, double arg2, const QString &string); int integer = ...; double floatingPoint = ...; QString string = ...; QFuture<void> future = QtConcurrent::run(aFunctionWithArguments, integer, floatingPoint, string);
extern QString functionReturningAString(); QFuture<QString> future = QtConcurrent::run(functionReturningAString); ... QString result = future.result();
extern QString someFunction(const QByteArray &input); QByteArray bytearray = ...; QFuture<QString> future = QtConcurrent::run(someFunction, bytearray); ... QString result = future.result();
使用成员函数:
如果传递是指针,同时是跳入非常量处理的函数指针。// call 'QList<QByteArray> QByteArray::split(char sep) const' in a separate thread QByteArray bytearray = "hello world"; QFuture<QList<QByteArray> > future = QtConcurrent::run(bytearray, &QByteArray::split, ','); ... QList<QByteArray> result = future.result();
// call 'void QImage::invertPixels(InvertMode mode)' in a separate thread QImage image = ...; QFuture<void> future = QtConcurrent::run(&image, &QImage::invertPixels, QImage::InvertRgba); ... future.waitForFinished(); // At this point, the pixels in 'image' have been inverted
QFuture<void> future = QtConcurrent::run([=]() { // Code in this block will run in another thread }); ...
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算