gpt4 book ai didi

qt - 如何创建具有立即可用值的 QFuture?

转载 作者:行者123 更新时间:2023-12-04 13:21:47 25 4
gpt4 key购买 nike

我有一个函数返回 QFuture 对象作为 QtConcurrent::run 计算的结果。但是,在运行并发方法之前可能存在某些情况,我需要从我的函数中手动返回一个持有值(value)的 future 。

QFuture<bool> foo(const QString &bar)
{
if (bar.isEmpty()) {
return QFuture<bool>(false); // This does not work.
// Here I need to return from the function, but I don't know how to do it.
}
return QtConcurrent::run([=]() -> bool {
// Asynchronous computations...
});
}

如何手动创建QFuture对象?
或者(更全局化)如何从这种方法中正确返回?

最佳答案

当没有数据返回时,事情就简单了——这应该是现代 C++ 中首先要尝试的事情:

return {};

或者,如果您的目标是一些过时的平台 (

return QFuture<bool>();

这样你就得到了一个无效的 future 。没有办法直接创建一个携带预设数据的 future ,你必须为此使用 QFutureInterface:

// https://github.com/KubaO/stackoverflown/tree/master/questions/qfuture-immediate-50772976
#include <QtConcurrent>

template <typename T> QFuture<T> finishedFuture(const T &val) {
QFutureInterface<T> fi;
fi.reportFinished(&val);
return QFuture<T>(&fi);
}

QFuture<bool> foo(bool val, bool valid) {
if (!valid)
return {};
return finishedFuture(val);
}

int main() {
Q_ASSERT(foo(true, true));
Q_ASSERT(!foo(false, true));
Q_ASSERT(foo(false, false).isCanceled());
Q_ASSERT(foo(true, false).isCanceled());
}

关于qt - 如何创建具有立即可用值的 QFuture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50772976/

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