gpt4 book ai didi

multithreading - 可以取消并报告进度的QFuture

转载 作者:行者123 更新时间:2023-12-03 23:21:11 28 4
gpt4 key购买 nike

QFuture类具有诸如cancel()progressValue()等方法。这些方法显然可以通过QFutureWatcher进行监视。但是,QtConcurrent::run()的文档为:

Note that the QFuture returned by QtConcurrent::run() does not support canceling, pausing, or progress reporting. The QFuture returned can only be used to query for the running/finished status and the return value of the function.



我徒劳地寻找哪种方法实际上可以创建一个可以取消的 QFuture并为一个长时间运行的操作报告进度。 (看起来 QtConcurrent::map()和类似的函数可能可以,但是我只有一个长期运行的方法。)

(对于熟悉.Net的人,类似于 BackgroundWorker类。)

有哪些可用选项?

最佳答案

对于长期运行的单个任务, QThread 可能是您最好的选择。它没有内置的进度报告或取消功能,因此您必须自己动手。但是对于简单的进度更新,它并不难。要取消任务,请检查可以在任务循环中调用线程设置的标志。

需要注意的一件事是,如果您重写QThread::run()并将任务放在此处,则无法从那里发出信号,因为QThread对象不是在运行它的线程内创建的,并且您不能从运行线程中提取QObject。这个issue有一个不错的文章。

关于multithreading - 可以取消并报告进度的QFuture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423058/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com