Qt 如何创建具有即时可用价值的QFuture?
我有一个函数,它返回Qt 如何创建具有即时可用价值的QFuture?,qt,qtconcurrent,qfuture,Qt,Qtconcurrent,Qfuture,我有一个函数,它返回QFuture对象,作为QtConcurrent::run计算的结果。但是,在运行并发方法之前,可能存在一些条件,在这些条件下,我需要从函数中手动返回一个包含future的值 QFuture<bool> foo(const QString &bar) { if (bar.isEmpty()) { return QFuture<bool>(false); // This does not work. //
QFuture
对象,作为QtConcurrent::run
计算的结果。但是,在运行并发方法之前,可能存在一些条件,在这些条件下,我需要从函数中手动返回一个包含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 foo(const QString&bar)
{
if(bar.isEmpty()){
返回QFuture(false);//这不起作用。
//这里我需要从函数返回,但我不知道如何做。
}
返回QtConcurrent::run([=]()->bool{
//异步计算。。。
});
}
如何手动创建QFuture
对象?或者(更全面地说)如何正确地从这种方法返回?当没有数据可返回时,事情很简单-这应该是在现代C++中尝试的第一件事:
return {};
或者,如果您的目标是某个过时的平台(如果
bar
是空的QString
,那么抛出一个合适的异常会更简单/可以接受吗?您的示例对我很有用
return QFuture<bool>();
// 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());
}