首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFuture帮助,线程化C++ Qt

QFuture帮助,线程化C++ Qt
EN

Stack Overflow用户
提问于 2013-04-22 23:32:45
回答 1查看 7K关注 0票数 3

所以我发现在我的UI程序上发生了一些问题,因为我没有使用线程。

我看了一下,从我在文档中看到的QFuture似乎就是我所需要的,当你有一个函数,你只想在线程中运行它时,我认为这是正确的吗?

是的,所以假设我是正确的,我浏览了所有示例中显示的文档和类型代码,基本上它根本不起作用……

UI.cpp

代码语言:javascript
复制
#include <QFuture>
#include <QtConcurrent/QtConcurrentRun>
#include "something.h"
void UI::button_click()
{
     something s;
     QFuture<int> result = QtConcurrent::run(s.heavyFunction());

     result.waitForFinished();
}

something.cpp

代码语言:javascript
复制
int something::heavyFunction()
{
     // heavy code here
     return 42;
}

好吧,显然这不是真正的代码,但这里与我的实际代码没有什么不同,但我得到了以下错误

代码语言:javascript
复制
error C2780: 'QFuture<T> QtConcurrent::run(T (__cdecl *)(Param1),const Arg1 &)' : expects 2 arguments - 1 provided

它说这个错误大约是7次,基本上是1,2,3,4,5,6,7个参数,预期1提供?

我从许多示例中获得了这段代码,所以我有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-22 23:50:23

QtConcurrent::run接受一个函数和要传递给该函数的参数。在使用成员函数的情况下,您需要类似于

代码语言:javascript
复制
something s;
QFuture<int> result = QtConcurrent::run(&s, &something::heavyFunction);

something::heavyFunction这样的成员函数接受T*类型的隐式参数,其中T是具有成员函数的类型(在本例中为something)。QtConcurrent::run似乎通过将实例作为第一个参数,并将成员函数作为第二个参数来处理此问题。这似乎是不自然的和反直觉的,并与例如std::async不一致。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16150961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档