标签: qfuture

QFuture可以取消并报告进度

QFuture类有方法,例如cancel(),progressValue()等.这些可明显通过被监测QFutureWatcher.但是,QtConcurrent::run()读取文档:

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

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

(对于熟悉.Net的人来说,就像BackgroundWorker班级一样.)

有哪些选择?

qt multithreading qtconcurrent qfuture

13
推荐指数
2
解决办法
9511
查看次数

QFuture <void>无效

我试图让我的应用程序在多个线程上运行,以使其进程更有效.我在Qt的网站上找到QFuture了可以帮助我的temmplate课程.我试图在他们的一个例子中使用.以下是我的类声明/定义的一部分.

class PreferencesWindow {
public:
    PreferencesWindow(QWidget *parent = 0);
public slots:
    void dbsChanged();
}

PreferencesWindow::PreferencesWindow(QWidget *parent = 0) {
    QFuture<void> fns = run(dbsChanged);
}
Run Code Online (Sandbox Code Playgroud)

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

error C2780: 'QFuture<FunctionObject::result_type> QtConcurrent::run(FunctionObject *,const Arg1 &)' : expects 2 arguments - 1 provided
Run Code Online (Sandbox Code Playgroud)

我错在哪里以及如何在不同的线程上运行该插槽?

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

c++ qt multithreading qfuture

3
推荐指数
1
解决办法
1004
查看次数

标签 统计

multithreading ×2

qfuture ×2

qt ×2

c++ ×1

qtconcurrent ×1