首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当QFuture超出范围时会发生什么?

当QFuture超出范围时会发生什么?
EN

Stack Overflow用户
提问于 2020-02-19 15:25:01
回答 1查看 220关注 0票数 3

我有下面的代码可以工作(但它不应该工作)

代码语言:javascript
复制
void myfunction(){

  auto future = function_which_return_future();
  auto *watcher = new QFutureWatcher<VariantTable>;

  QObject::connect(watcher,&QFutureWatcher<VariantTable>::finished,this,[=](){
       VariantTable table = future.result();
       // do some stuff
       delete watcher;
   });

   watcher->setFuture(future);
}

在这段代码中,未来超出了范围,但是监视槽内的代码仍然被执行。

,这是因为事情发生得太快了,如果事情放缓,我的代码会失败吗?,还是调用QFutureWatcher::setFuture之后我不需要未来?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 16:03:42

关于未来在您的插槽中的使用的

您的lambda槽通过值复制未来和观察者指针。因此,当插槽被调用时,它并不关心超出范围的最初的未来。

关于未来在QFutureWatcher<VariantTable> 对象:中的用法的

如果我们查看一下QFutureWatcher<T>::setFuture()source code of QFutureWatcher中的实现,我们可以看到:

模板Q_INLINE_TEMPLATE void::setFuture(const QFuture &_future) { if (_future == m_future)返回;disconnectOutputInterface(true);m_future = _future;connectOutputInterface();}

private成员m_future被定义为QFuture<T> m_future;

显然,QFutureWatcher拥有自己的未来副本。

因此,在您的指示:watcher->setFuture(future);之后,不再使用原始的未来。

回答你的问题:

我有下面的代码可以工作(但它不应该工作)

实际上,在前面提到的情况下,它应该可以工作:)

注意:它可能无法按预期工作,因为在您的插槽中复制的未来和在您的观察者对象中复制的未来是两个不同的实例。

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

https://stackoverflow.com/questions/60303696

复制
相关文章

相似问题

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