我可以将另一个QFuture对象分配给已经在运行的QFuture对象吗?如下所示:
QFuture<int> future = QtConcurrent::run(function);
future = QtConcurrent::run(anotherFunciton); //assume that future is still running at this point我意识到这个特别的例子没有多大意义,只是为了举例而已。假设第一个函数的结果不再让我感兴趣,做这样的辅助是安全的吗?还是我得先取消?如果是这样的话,我是否必须等待取消申请才能完成?
QFuture<int> future = QtConcurrent::run(function);
future.cancel();
future.waitForFinished(); //is waiting necessary?
future = QtConcurrent::run(anotherFunciton);发布于 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);;原始线程将过期并退出。然而,这样做的效率是值得怀疑的。
https://stackoverflow.com/questions/32615805
复制相似问题