问题标签 [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.
multithreading - QT编程,QtConcurrent运行函数
我有一个程序,它的类MainWindow
继承自QMainWindow
. 我想在一个新线程中运行一个特定的函数。
由于我不能继承,QThread
所以最好的解决方案是使用QtConcurrent
. 我将QtConcurrent
结果存储在 aQFuture
但如 QT 文档中所述,结果QtConcurrent
不能被QFuture::cancel
.
QThread
我看到了一些像我一样的问题,但答案是创建一个我不能继承的类。那么解决方案是什么?这是我的代码:
主窗口.h:
主窗口.cpp:
当我点击 时graph_pushButton
,generatedGraph
在一个新线程中被调用,但是当我点击时stop_pushButton
不会future
停止并且generatedGraph
函数完全执行。
c++ - QFutureWatcher 是否可以用于监视所有使用 QConcurrent 运行的多个串行任务?
我有一系列任务需要在一组图像上进行。我想一个接一个地运行 3 个步骤,但中间的一个需要连续运行,因为它依赖于所有先前迭代的结果。我想要的是使用QFutureWatcher
. 我已经有其他任务可以执行此操作并连接到进度条等,所以如果可以的话,我可以使用相同的过程。我正在考虑实现的方式是拥有一个内部QFuture
并QFutureWatcher
运行每个任务,以及一个外部QFutureWatcher
监控此任务并将信息中继到 UI。也许是这样的(伪代码):
这样的事情可能吗?我只需要重写一些方法QFutureWatcher
并将它们用作我的 externalFutureWatcher 吗?或者以这种方式不可能/有更好的方法吗?
qt - QFuture 内存泄漏
我想并行化一个函数并遇到几个小时后我的内存超载的问题。
测试程序计算一些简单的东西,并且到目前为止有效。只有内存使用量在不断增加。
QT项目文件:
QT程序文件:
正如我所观察到的,QtConcurrent::run(parallel_function,thread)
分配内存,但在future[thread].waitForFinished()
.
这里有什么问题?
c++ - 带有没有 QConcurrent 的信号的 QT c++ QFutures,比如 promises/observables?
我正在研究如何将 Futures 与非阻塞事件驱动代码一起使用(是否在单独的线程中,两者都在)但是我如何从一个插槽结束未来(〜基于信号解决承诺)?
基本上,我只想使用一个实例将串行设备(本质上是同步的)包装在 Futures 队列中,但只有使用 &QIODevice::bytesWritten &QIODevice::readyRead 等信号的非阻塞代码......如果有更好的解决问题的方法让我知道,我很高兴知道在 Qt 中编写可读异步代码而不阻塞单独线程的正确方法
c++ - 如果作业在附加之前完成,QFutureWatcher 的 finished() 信号会被触发吗?
的finished()
信号是否QFutureWatcher
总是会被触发,即使 代表的并发作业在附加到QFuture
之前已经完成?QFutureWatcher
QFuture
考虑以下示例:
而且,最重要的是,如果没有发生这种情况,handleFinished()
在这种情况下如何让插槽始终被调用?
qt - 如何创建具有立即可用价值的 QFuture?
我有一个QFuture
作为QtConcurrent::run
计算结果返回对象的函数。但是,在运行并发方法之前可能存在一些条件,我需要从我的函数中手动返回一个保值未来。
如何手动创建QFuture
对象?
或者(更全面地)如何正确地从这种方法返回?
c++ - 在取消线程上使用 QFuture 释放内存
我正在编写一个QtConcurrent
用于启动线程的程序。就我而言,当我使用鼠标滚动时,我使用它来呈现 QGraphicsView。
我正在使用以下代码启动线程:
线程完成后,我finished
用QfutureWatcher
.
这是我的渲染功能:
如您所见,我的QList<QGraphicsItem*>
渲染函数中有一个。当未来被取消时,我怎样才能销毁这个列表?我不明白在我的代码中我正在重新定义future
变量,但我不知道如何避免它。
c++ - 如何从另一个线程关闭对话框?Qt
我想以这种方式处理我的按钮:
- 更改标签上的文字(类似于“请稍候...”)
- 从数据库下载一些数据
- 下载完成后,关闭对话框,此按钮在哪里。
当我这样做时:
标签没有更改文本,延迟几秒钟(正在下载几 k 条记录)并且对话框正在关闭。
当我尝试这个时:
标签有更改文本 - 没关系,延迟几秒钟 - 没关系,但对话框没有关闭,我的应用程序抛出异常:
有什么建议吗?
c++ - 如何在 Qt 中设计异步包装器返回值?
我在 Qt 中为外部可执行文件编写了一个包装类。它有很多方法,其中大多数:
- 很耗时。
- 需要返回不同类型的值。
在这种情况下,同步包装器非常简单:
但是,我想让这个包装器异步,如下所示:
问题
我不确定这种模式是否可以,因为我有多个要点:
- 复制。假设有 100 种方法。这些方法中的每一种都需要一个专用信号。
- 比赛条件。如果我多次运行相同的方法,我无法知道我捕获的信号的顺序。
可能的解决方案
我提出的其他一些想法:
- 坚持同步包装器并
QtConcurrent::run
在调用类方法时使用。不幸的是,这是一个非常庞大的解决方案。 - 从方法返回
QFuture
对象。同样,这将需要QFutureWatcher
在仍然非常庞大的类之外使用 s 来处理它们。 - 为每个方法创建一个单独的类。如果我没记错的话,这是一个命令模式。虽然这会大大增加课程的数量,但我相信这是最干净的解决方案。
在 Qt 中设计这种异步包装器的正确方法是什么?
c++ - 当 QFuture 超出范围时会发生什么?
我有以下有效的代码(但它不应该有效)
在这段代码中,future 超出了范围,但 watch 的 slot 内的代码仍然被执行。
这是因为事情发生得太快了,如果事情变慢,我的代码可能会失败吗?还是只是在调用 QFutureWatcher::setFuture 之后我不需要未来?