所以我发现我的UI程序上的一些问题正在发生,因为我没有使用线程.
我看了一下,从文档中我可以看到QFuture看起来像我需要的东西,我是否正确地认为当你有一个函数并且你只想在一个线程中运行它时会使用它?
正确,所以假设我正确,我通过所有示例中显示的文档和类型代码,基本上它根本不起作用...
UI.cpp
#include <QFuture>
#include <QtConcurrent/QtConcurrentRun>
#include "something.h"
void UI::button_click()
{
something s;
QFuture<int> result = QtConcurrent::run(s.heavyFunction());
result.waitForFinished();
}
Run Code Online (Sandbox Code Playgroud)
something.cpp
int something::heavyFunction()
{
// heavy code here
return 42;
}
Run Code Online (Sandbox Code Playgroud)
好吧显然这不是真正的代码,但这里没有什么不同于我的实际代码但我得到以下错误
error C2780: 'QFuture<T> QtConcurrent::run(T (__cdecl *)(Param1),const Arg1 &)' : expects 2 arguments - 1 provided
Run Code Online (Sandbox Code Playgroud)
并且它说这个错误大约7次基本上说1,2,3,4,5,6,7个参数预期1提供?
我从许多例子中得到了这个代码,所以我错过了什么想法?
QtConcurrent::run将函数和参数传递给该函数.在成员函数的情况下,您需要类似的东西
something s;
QFuture<int> result = QtConcurrent::run(&s, &something::heavyFunction);
Run Code Online (Sandbox Code Playgroud)
成员函数,例如something::heavyFunction采用类型的隐式参数T*,其中T是具有成员函数的类型(something在本例中).QtConcurrent::run似乎通过将实例作为第一个参数来处理这个问题,并将成员函数作为第二个参数来处理.这似乎不自然,反直觉,与例如不一致std::async.
| 归档时间: |
|
| 查看次数: |
6203 次 |
| 最近记录: |