gpt4 book ai didi

c++ - QFuture 帮助,线程 C++ Qt

转载 作者:太空狗 更新时间:2023-10-29 20:27:32 27 4
gpt4 key购买 nike

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

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

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

用户界面.cpp

#include <QFuture>
#include <QtConcurrent/QtConcurrentRun>
#include "something.h"
void UI::button_click()
{
something s;
QFuture<int> result = QtConcurrent::run(s.heavyFunction());

result.waitForFinished();
}

一些东西.cpp

int something::heavyFunction()
{
// heavy code here
return 42;
}

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

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 提供?

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

最佳答案

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

something s;
QFuture<int> result = QtConcurrent::run(&s, &something::heavyFunction);

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

关于c++ - QFuture 帮助,线程 C++ Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16150961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com