首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分配给运行的QFuture

分配给运行的QFuture
EN

Stack Overflow用户
提问于 2015-09-16 18:15:14
回答 1查看 529关注 0票数 1

我可以将另一个QFuture对象分配给已经在运行的QFuture对象吗?如下所示:

代码语言:javascript
复制
 QFuture<int> future = QtConcurrent::run(function);
 future = QtConcurrent::run(anotherFunciton); //assume that future is still running at this point

我意识到这个特别的例子没有多大意义,只是为了举例而已。假设第一个函数的结果不再让我感兴趣,做这样的辅助是安全的吗?还是我得先取消?如果是这样的话,我是否必须等待取消申请才能完成?

代码语言:javascript
复制
 QFuture<int> future = QtConcurrent::run(function);
 future.cancel();
 future.waitForFinished(); //is waiting necessary?
 future = QtConcurrent::run(anotherFunciton);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-16 18:58:26

来自http://doc.qt.io/qt-4.8/qtconcurrentrun.html

注意,QtConcurrent::run()返回的QFuture不支持取消、暂停或进度报告。返回的QFuture只能用于查询运行/完成状态和函数的返回值。

也就是说,即使你愿意,你也不能取消你的QFuture。此外,即使取消是允许的,你为什么要取消它,然后等待它完成?

来自http://doc.qt.io/qt-4.8/qthreadpool.html#expiryTimeout-prop

未使用一定时间的线程将过期。默认的过期超时为30000毫秒(30秒)。这可以使用setExpiryTimeout()进行更改。设置负过期超时将禁用过期机制。

因为由QtConcurrent::run()启动的线程是由QThreadPool类管理的,那么假设您没有指定一个负过期超时,那么您应该能够在没有问题的情况下future = QtConcurrent::run(anotherFunciton);;原始线程将过期并退出。然而,这样做的效率是值得怀疑的。

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

https://stackoverflow.com/questions/32615805

复制
相关文章

相似问题

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