问题标签 [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 投票
0 回答
588 浏览

multithreading - QT编程,QtConcurrent运行函数

我有一个程序,它的类MainWindow继承自QMainWindow. 我想在一个新线程中运行一个特定的函数。

由于我不能继承,QThread所以最好的解决方案是使用QtConcurrent. 我将QtConcurrent结果存储在 aQFuture但如 QT 文档中所述,结果QtConcurrent不能被QFuture::cancel.

QThread我看到了一些像我一样的问题,但答案是创建一个我不能继承的类。那么解决方案是什么?这是我的代码:

主窗口.h:

主窗口.cpp:

当我点击 时graph_pushButtongeneratedGraph在一个新线程中被调用,但是当我点击时stop_pushButton不会future停止并且generatedGraph函数完全执行。

0 投票
0 回答
121 浏览

c++ - QFutureWatcher 是否可以用于监视所有使用 QConcurrent 运行的多个串行任务?

我有一系列任务需要在一组图像上进行。我想一个接一个地运行 3 个步骤,但中间的一个需要连续运行,因为它依赖于所有先前迭代的结果。我想要的是使用QFutureWatcher. 我已经有其他任务可以执行此操作并连接到进度条等,所以如果可以的话,我可以使用相同的过程。我正在考虑实现的方式是拥有一个内部QFutureQFutureWatcher运行每个任务,以及一个外部QFutureWatcher监控此任务并将信息中继到 UI。也许是这样的(伪代码):

这样的事情可能吗?我只需要重写一些方法QFutureWatcher并将它们用作我的 externalFutureWatcher 吗?或者以这种方式不可能/有更好的方法吗?

0 投票
2 回答
712 浏览

qt - QFuture 内存泄漏

我想并行化一个函数并遇到几个小时后我的内存超载的问题。

测试程序计算一些简单的东西,并且到目前为止有效。只有内存使用量在不断增加。

QT项目文件:

QT程序文件:

正如我所观察到的,QtConcurrent::run(parallel_function,thread)分配内存,但在future[thread].waitForFinished().

这里有什么问题?

0 投票
1 回答
437 浏览

c++ - 带有没有 QConcurrent 的信号的 QT c++ QFutures,比如 promises/observables?

我正在研究如何将 Futures 与非阻塞事件驱动代码一起使用(是否在单独的线程中,两者都在)但是我如何从一个插槽结束未来(〜基于信号解决承诺)?

基本上,我只想使用一个实例将串行设备(本质上是同步的)包装在 Futures 队列中,但只有使用 &QIODevice::bytesWritten &QIODevice::readyRead 等信号的非阻塞代码......如果有更好的解决问题的方法让我知道,我很高兴知道在 Qt 中编写可读异步代码而不阻塞单独线程的正确方法

0 投票
0 回答
206 浏览

c++ - 如果作业在附加之前完成,QFutureWatcher 的 finished() 信号会被触发吗?

finished()信号是否QFutureWatcher总是会被触发,即使 代表的并发作业在附加到QFuture之前已经完成?QFutureWatcherQFuture

考虑以下示例:

而且,最重要的是,如果没有发生这种情况,handleFinished()在这种情况下如何让插槽始终被调用?

0 投票
1 回答
1901 浏览

qt - 如何创建具有立即可用价值的 QFuture?

我有一个QFuture作为QtConcurrent::run计算结果返回对象的函数。但是,在运行并发方法之前可能存在一些条件,我需要从我的函数中手动返回一个保值未来。

如何手动创建QFuture对象?
或者(更全面地)如何正确地从这种方法返回?

0 投票
1 回答
527 浏览

c++ - 在取消线程上使用 QFuture 释放内存

我正在编写一个QtConcurrent用于启动线程的程序。就我而言,当我使用鼠标滚动时,我使用它来呈现 QGraphicsView。

我正在使用以下代码启动线程:

线程完成后,我finishedQfutureWatcher.

这是我的渲染功能:

如您所见,我的QList<QGraphicsItem*>渲染函数中有一个。当未来被取消时,我怎样才能销毁这个列表?我不明白在我的代码中我正在重新定义future变量,但我不知道如何避免它。

0 投票
1 回答
169 浏览

c++ - 如何从另一个线程关闭对话框?Qt

我想以这种方式处理我的按钮:

  1. 更改标签上的文字(类似于“请稍候...”)
  2. 从数据库下载一些数据
  3. 下载完成后,关闭对话框,此按钮在哪里。

当我这样做时:

标签没有更改文本,延迟几秒钟(正在下载几 k 条记录)并且对话框正在关闭。

当我尝试这个时:

标签有更改文本 - 没关系,延迟几秒钟 - 没关系,但对话框没有关闭,我的应用程序抛出异常:

有什么建议吗?

0 投票
1 回答
161 浏览

c++ - 如何在 Qt 中设计异步包装器返回值?

我在 Qt 中为外部可执行文件编写了一个包装类。它有很多方法,其中大多数:

  • 很耗时。
  • 需要返回不同类型的值。

在这种情况下,同步包装器非常简单:

但是,我想让这个包装器异步,如下所示:

问题

我不确定这种模式是否可以,因为我有多个要点:

  • 复制。假设有 100 种方法。这些方法中的每一种都需要一个专用信号。
  • 比赛条件。如果我多次运行相同的方法,我无法知道我捕获的信号的顺序。

可能的解决方案

我提出的其他一些想法:

  • 坚持同步包装器并QtConcurrent::run在调用类方法时使用。不幸的是,这是一个非常庞大的解决方案。
  • 从方法返回QFuture对象。同样,这将需要QFutureWatcher在仍然非常庞大的类之外使用 s 来处理它们。
  • 为每个方法创建一个单独的类。如果我没记错的话,这是一个命令模式。虽然这会大大增加课程的数量,但我相信这是最干净的解决方案。

在 Qt 中设计这种异步包装器的正确方法是什么?

0 投票
1 回答
159 浏览

c++ - 当 QFuture 超出范围时会发生什么?

我有以下有效的代码(但它不应该有效)

在这段代码中,future 超出了范围,但 watch 的 slot 内的代码仍然被执行。

这是因为事情发生得太快了,如果事情变慢,我的代码可能会失败吗?还是只是在调用 QFutureWatcher::setFuture 之后我不需要未来?