QtTaskTree::QThreadFunction Class
template <typename ResultType> class QtTaskTree::QThreadFunction一个类模板,用于通过 QtConcurrent::run() 在单独的线程中控制函数的执行。更多内容...
| 头文件: | #include <qthreadfunctiontask.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS TaskTree) target_link_libraries(mytarget PRIVATE Qt6::TaskTree) |
| qmake: | QT += tasktree |
| 自: | Qt 6.11 |
| 继承自: | QtTaskTree::QThreadFunctionBase |
| 状态: | 技术预览 |
该类处于技术预览阶段,内容可能会有变动。
注意:该类中的所有函数均为可重入的。
公共函数
| QThreadFunction(QObject *parent = nullptr) | |
| virtual | ~QThreadFunction() override |
| QFuture<ResultType> | future() const |
| QFutureWatcher<ResultType> * | futureWatcher() |
| const QFutureWatcher<ResultType> * | futureWatcher() const |
| bool | isAutoDelayedSync() const |
| bool | isDone() const |
| bool | isResultAvailable() const |
| ResultType | result() const |
| ResultType | resultAt(int index) const |
| QList<ResultType> | results() const |
| void | setAutoDelayedSync(bool on) |
| void | setThreadFunctionData(Function &&function, Args &&... args) |
| void | setThreadPool(QThreadPool *pool) |
| ResultType | takeResult() const |
| QThreadPool * | threadPool() const |
详细说明
QThreadFunction 是一个便捷的类模板,其中ResultType 指定了存储函数的返回类型,它将一个稍后通过 QtConcurrent::run() 调用的存储函数与一个监控函数执行的内部QFutureWatcher 结合在一起。使用QThreadFunctionTask 在QTaskTree 配方中执行 QThreadFunction。
使用setThreadFunctionData()方法,将一个函数及其参数设置为在单独的线程中执行。
若要在单独线程中运行的函数内部报告错误,请将该函数的QPromise<ResultType> &promise 参数设为第一个参数,并取消该Promise的Future。示例:
static void copyFile(QPromise<void> &promise, const QString &source,
const QString &destination)
{
const QFileInfo fi(source);
if (!fi.exists()) {
promise.future().cancel(); // The QThreadFunction finishes with DoneResult::Error
return;
}
// Copy file...
}
QThreadFunction<void> task;
task.setThreadFunctionData(copyFile, "source.txt", "dest.txt");
task.start();使用 `setThreadPool()` 在指定的 `QThreadPool` 中执行函数,否则该函数将使用 `global thread pool`。
使用 `setAutoDelayedSync()` 来切换自动延迟同步功能。
要控制函数执行,请连接到关联的futureWatcher()的信号。要收集输出数据,请使用result()、resultAt()或results()获取器。
成员函数文档
[implicit] QThreadFunction::QThreadFunction(QObject *parent = nullptr)
根据给定的parent ,构建一个QThreadFunction。
[override virtual] QThreadFunction::~QThreadFunction()
销毁QThreadFunction 。如果QThreadFunction 未运行,则不执行任何其他操作;否则,将取消关联的Future,并根据自动延迟同步的设置执行以下操作:
| 自动延迟同步 | 操作 |
|---|---|
| 启用 | 关联的QFuture 将存储在全球注册表中。请在应用程序退出时调用QThreadFunctionBase::syncAll(),以同步之前存储在全球注册表中的所有Future。 |
| 关闭 | 对 `QFuture::waitForFinished()` 的阻塞调用将直接执行。 |
当自动延迟同步开启时,该未来对象的取消操作可能会被仍在单独线程中运行的函数拦截,从而使其在未完成任务的情况下尽早结束。
最后,在应用程序退出时,应调用 `QThreadFunctionBase::syncAll()` 以同步所有可能仍在不同线程中运行的函数。如果某些函数仍在进行终结处理,则对 `QThreadFunctionBase::syncAll()` 的调用将是阻塞的。
注意:当 自动延迟同步处于启用状态时 ,函数在QThreadFunction 的析构函数完成后仍会继续运行一段时间,因此用户有责任确保该函数可能操作的所有数据仍然可用。如果无法保证这一点,请通过QThreadFunction::setAutoDelayedSync(false)将自动延迟同步设置为关闭。 在这种情况下,QThreadFunction 的析构函数将阻塞等待该函数执行完毕,然后才删除QThreadFunction 。有关Deleter 模板参数的更多信息,请参阅QCustomTask 文档。
另请参阅 setAutoDelayedSync() 和syncAll()。
QFuture<ResultType> QThreadFunction::future() const
返回与在单独线程中执行的函数关联的 `QFuture<ResultType>`。
QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()
返回与在单独线程中执行的函数关联的QFutureWatcher<ResultType> 的指针。返回的监视器的生命周期与QThreadFunction 实例绑定。
若需对未来的执行进行更精细的控制(例如,连接到返回的监视器的进度信号),请使用此函数。
const QFutureWatcher<ResultType> *QThreadFunction::futureWatcher() const
返回指向与在单独线程中执行的函数相关的QFutureWatcher<ResultType> 的const 指针。
这是一个重载函数。
bool QThreadFunction::isAutoDelayedSync() const
返回自动延迟同步是否已启用。
另请参阅 syncAll() 和setAutoDelayedSync()。
bool QThreadFunction::isDone() const
返回函数执行是否已完成。
bool QThreadFunction::isResultAvailable() const
返回结果是否已准备就绪。
另请参阅 result()。
ResultType QThreadFunction::result() const
返回由在单独线程中执行的函数报告的 ResultType。
注意:请 通过调用 `isResultAvailable()`确保结果 已准备就绪,否则若结果尚未报告,对 `result()` 的调用可能会阻塞;若函数执行结束但未报告任何结果,甚至可能导致程序崩溃。
另请参阅 QFutureWatcher::result()。
ResultType QThreadFunction::resultAt(int index) const
返回在index 中由单独线程执行的函数报告的 ResultType。
另请参阅 result() 和QFutureWatcher::resultAt()。
QList<ResultType> QThreadFunction::results() const
返回在单独线程中执行的函数所报告的 ResultType 列表。
另请参阅 result()、resultAt() 以及QFuture::results()。
void QThreadFunction::setAutoDelayedSync(bool on)
将自动延迟同步设置为“on ”。
默认情况下,自动延迟同步处于启用状态,这意味着正在运行的QThreadFunction 对象的销毁不会阻塞等待,直到在单独线程中运行的函数完成。相反,关联的QFuture 会被取消,该函数将继续运行直至完成。 运行在单独线程中的函数可以通过QPromise 参数拦截该取消操作,从而使其在任务未完成时提前结束。如果启用了自动延迟同步,则在应用程序退出时必须调用QThreadFunctionBase::syncAll(),以同步所有可能在单独线程中运行的函数。
当自动延迟同步关闭时,同步操作将在QThreadFunction 销毁时发生,这可能会使调用线程阻塞相当长的时间。
自动同步仅在从主线程调用QThreadFunction 时生效。
另请参阅 syncAll() 和isAutoDelayedSync()。
template <typename Function, typename... Args> void QThreadFunction::setThreadFunctionData(Function &&function, Args &&... args)
将function 设置为在调用start()时,在单独的线程中使用传入的args 进行执行。
另请参阅 QtConcurrent::run()。
void QThreadFunction::setThreadPool(QThreadPool *pool)
设置在执行该调用时使用的QThreadPool pool 。如果传入的pool 为nullptr ,则使用QThreadPool::globalInstance()。
另请参阅 threadPool()。
ResultType QThreadFunction::takeResult() const
获取(获取)在单独线程中执行的函数所返回的 ResultType。
注意:请 通过调用 `isResultAvailable()`确保结果 已准备就绪,否则若结果尚未报告,对 `takeResult()` 的调用可能会阻塞;若函数执行结束但未报告任何结果,甚至可能导致程序崩溃。
另请参阅 QFuture::takeResult()。
QThreadPool *QThreadFunction::threadPool() const
返回执行该调用时所使用的线程池。如果返回nullptr ,则使用QThreadPool::globalInstance()。
另请参阅 setThreadPool()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.