问题标签 [qfuture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
12266 浏览

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

该类QFuture具有诸如 , 等方法cancel()progressValue()这些显然可以通过QFutureWatcher. 但是,文档为QtConcurrent::run()

请注意,QtConcurrent::run() 返回的 QFuture 不支持取消、暂停或进度报告。返回的 QFuture 只能用于查询函数的运行/结束状态和返回值。

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

(对于那些熟悉 .Net 的人,类似于BackgroundWorker课程。)

有哪些可用选项?

0 投票
2 回答
1271 浏览

c++ - QFuture行不通

我试图让我的应用程序在多个线程上运行,以提高其进程的效率。我在 Qt 的网站上找到QFuture了可以帮助我的模板类。我试图在他们的一个例子中使用 like 。下面是我的类声明/定义的一部分。

当我尝试运行它时,我收到 48 个错误(来自这一行),例如:

我在哪里错了,应该如何在不同的线程上运行该插槽?

我为什么要这个? 此方法的执行最多可能需要 30 秒(它会检查一些数据库设置)。在此期间,GUI 被冻结,这将导致糟糕的用户体验,因此我认为这是一个很好的解决方案。

0 投票
1 回答
291 浏览

qt - Problems developing QFutureWatcher to improve image loading times

I am trying to load multiple images using multithreading through QFutureWatcher class but I am not being able to do it properly. My code read the url of the images and save them on a QVector. Then I Pass these QStrings to a function that load, resize and save the images on a QMap object. The code is:

The error that I am receiving when I try to compile said that the list of arguments in the call to the function "addImageThumnailToMap" is not found but I think that it is not neccesary specify that on the "QtConcurrent::map()" function. Thanks for your help

0 投票
1 回答
932 浏览

qt - 将 QFuture 列表设置为 QFutureWatcher

是否可以添加QFuture多个QFutureWatcher?我想添加多个功能QFutureWatcher并在所有线程完成时收到通知。

QFutureSynchronizer没有帮助我,因为它没有完成的信号

0 投票
1 回答
479 浏览

c++ - 分配给运行 QFuture

我可以将另一个 QFuture 对象分配给已经运行的 QFuture 对象吗?如下例所示:

我意识到这个特定的例子没有多大意义,只是为了举例。假设第一个函数的结果不再让我感兴趣,那么进行这样的分配是否安全?还是我必须先取消?如果是这样,我是否必须等待取消完成?

0 投票
0 回答
1398 浏览

multithreading - 使用 QFutureWatcher 时函数未使用 QtConcurrent::run() 运行

QtConcurrent::run()我想在(Qt for Embedded Linux 4.8)调用的并行线程中调用一个函数来从系统中删除文件和文件夹。仅使用QFuture<bool>withQFuture::waitForFinished()来获取结果(我需要在操作后立即运行一些代码),我能够使系统工作。

但是我想在QProgressBar派生类中显示操作的正在进行的结果,setValue(int)并从删除函数内部通过信号和槽机制调用它,而我用上述方法得到的是一个冻结的主线程,而操作还没有完成,这是不可接受的。

所以我想使用QFutureWatcher<bool>它的finished()信号并将其连接到另一个插槽,其中包含要在删除操作完成后运行的剩余代码。

我面临的问题是,当我这样做时,删除功能根本不是由QtConcurrent::run()!我通过打印到终端的消息检查了这一点。发生的一切都是在没有执行任何删除文件功能的情况下QFutureWatcher调用其finished()信号(如果我使用,也会发生这种情况QFutureWatcher::waitForFinished())。

这是Qt的一些错误吗?

关于代码,它与 Qt Assistant 中的完全一样:全局创建 QFuture 和 QFutureWatcher,将 finished() 信号与 slot、callQtConcurrent::run()setFuture()未来连接。没什么特别的。

任何帮助表示赞赏。

编辑

按照 Kuba 的要求,这里是代码的相关部分:

这是使用 QFuture 和 QFutureWatcher 的所有代码。removeFiles如下(不要忘记它在没有 QFutureWatcher 的情况下运行良好):

0 投票
1 回答
456 浏览

c++ - 如何使用 QtConcurrent::Run 和 QThread?

我的代码是关于图像的。它可以是打开图像,改变质量,调整大小,显示图像大小......对于调整大小和改变质量,我使用滑块,当我更改滑块值时,图像会一次又一次地从缓冲区中读取。因此,我的程序中发生了冻结。所以,要解决我想使用的问题QtConcurrent::runand QThreador QFuture。实际上我不知道如何使用它们,我希望你能帮助我解决我的问题。

这是我的代码。导致冻结的功能是:

这是我的 mainwindow.h:

如何集成QtConcurrent::run(),QThreadQFuture我的代码?

0 投票
2 回答
3147 浏览

c++ - QFutureWatcher 如何观察多个任务/未来和完成()信号

我有一些任务,从QtConcurrent::run(). 任务有QFutureWatcher。我知道QFutureWatcher只能观看一个Future,但是当我从 UI 启动相同的任务时,如何在每个任务上创建 `QFutureWatcher*?是吗 :

或者是其他东西? * 我的麻烦是我从我的代码开始每个任务,但任务是使用外部 DLL 函数执行的。而且我没有 API 来停止任务。QFutureWatcher在我收到完成信号后,我只能等待任务结束并关闭任务并释放所有相关数据。

此时,我使用了两个 QFutureWatchers - 一个正在观看第一个运行的任务,另一个 - 如果第一个任务没有结束则启动,并使用临时观察者和临时槽观察第二个任务(代码相同,我创建它只是为了接收另一个观察者带有相关数据的信号),直到第一个任务结束。它观看了相同的代码,但我必须复制它以等待第一个任务结束,因为QFutureWatcher没有完成信号的队列和相关的 watcher.result()`s ..

1) Qt 有任何队列任务机制吗?或者我怎样才能捕捉到多个任务的未来?

2)QtConcurrent::run没有 cancel() 插槽。我可以对一个序列项使用映射/映射函数吗?映射 API 是否已排队处理任务/已完成信号?我怎么能意识到这一点?谢谢!

0 投票
1 回答
678 浏览

c++ - 是否可以在没有 QtConcurrent 的情况下使用 QFuture?

我有一个带有 的程序QThread,其中包含一个网络客户端。客户端应该获取一个对象,对其进行处理,将其上传到服务器,获取响应,然后向主线程报告。我用它做了这个std::promise,并使用了它的future. 我制作std::promise了一个在获取其未来后发出的对象的成员。

一个最小的示例代码如下:

我发出的对象:

我用于发射的部分:

有没有 Qt 方法可以做到这一点?

我只找到了一个QFuture可以与 QtConcurrent 一起使用的类。我找不到解释如何将其与QThread. 我有哪些选择可以正确使用 Qt?

0 投票
1 回答
363 浏览

c++ - 从 GUI 线程通过 QFuture 提交并发任务

为了避免在按钮单击时在 GUI 线程中进行计算,我试图在单独的线程中运行它。

只要我想有能力监控进度,我的代码就基于这个源。

所以,我的代码是:

这与 qt 文档中的给定来源非常相似,但它给出了相应的错误:

那么,如何在button_clicked不制作 GUI 手的情况下使用插槽中非 gui 类的函数正确填充工作线程?

UPD

好吧,我现在已经成功编译了代码,这就是它的工作原理:

但是按钮单击仍然会导致运行时出错: 运行时错误

我尝试运行的函数不会生成任何小部件,因此此消息的原因尚不清楚。

我已经阅读了几个问题(像这样),所有代码都声明可以工作,但它只存在于main()远离我需要的地方。那么,再次,我如何从 GUI 线程启动它?